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:你可以,这方面有很好的用例。您不能拥有一个析构函数,该析构函数作为异常展开和抛出的一部分执行。注释不是用于长描述的合适空间,但实际上存在一些用例:)