C++ C+中的抛出说明符更松散+;

C++ C+中的抛出说明符更松散+;,c++,c++11,C++,C++11,这个错误意味着什么?我怎样才能修好它?这是导致它的头代码: class BadJumbleException : public exception { public: BadJumbleException (const string& msg); // Constructor, accepts a string as the message string& what(); // Returns the message

这个错误意味着什么?我怎样才能修好它?这是导致它的头代码:

class BadJumbleException : public exception {
public:
    BadJumbleException (const string& msg); // Constructor, accepts a string as the message
    string& what();                         // Returns the message string
private:
    string message;                         // Stores the exception message
};
这是源代码:

BadJumbleException::BadJumbleException (const string& m) : message(m) {}
string& BadJumbleException::what() { return message; }
编辑:这是错误:

“虚拟BadJumbleException::~BadJumbleException()的抛出说明符更松散


在C++03中,根据§18.6.1/5,
std::exception
有一个析构函数,该析构函数被声明为不会抛出异常()

该语言要求当您从此类类型派生时,您自己的析构函数必须具有相同的限制:

virtual BadJumbleException::~BadJumbleException() throw() {}
//                                                ^^^^^^^
这是因为重写函数可能没有更宽松的抛出规范


在C++11中,
std::exception::~exception
未在库代码中显式标记为
throw()
(或
noexcept
),但默认情况下,所有析构函数都是
noexcept(true)


因为,这使我得出结论,您并不是真正以C++11进行编译。

您发布错误了吗?需要声明什么才不会抛出任何东西。@Flexo您的意思是什么?看看这篇SO文章。我认为编译器意味着抛出说明符只适用于松散的说明符。简言之,这个错误是如何修复的?为什么这段代码可以在其他项目中工作,而不是在这个项目中工作?顺便问一下,
throw()
说明符在析构函数中有什么意义?无论如何,你不能在析构函数中抛出异常…@MatteoItalia:在C++03中,是的,你可以。它在运行时终止程序。因此,
throw()。因此,C++11完全解决了这个问题。@user2824889:我不理解你的问题。我连你的“其他项目”的第一件事都不知道,我无法回答。@MatteoItalia:你可以,这方面有很好的用例。您不能拥有一个析构函数,该析构函数作为异常展开和抛出的一部分执行。注释不是用于长描述的合适空间,但实际上存在一些用例:)