这个错误是什么意思?我该如何解决?这是导致它的 header 代码:
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; }
编辑:这是错误:
最佳答案
在C++ 03中,根据§18.6.1/ 5,std::exception
具有一个析构函数,该析构函数声明为不会将任何异常抛出(a compilation error will be caused instead)。
该语言要求,当您从此类类型派生时,您自己的析构函数必须具有相同的限制:
virtual BadJumbleException::~BadJumbleException() throw() {}
// ^^^^^^^
这是因为重写函数可能没有较宽松的抛出规范。
在C++ 11中,
std::exception::~exception
并未在库代码中明确标记为throw()
(或noexcept
),但默认情况下所有析构函数均为noexcept(true)
。从that rule would include your destructor and allow your program to compile开始,这使我得出一个结论,那就是您实际上并没有将其编译为C++ 11。
关于c++ - C++中的松散抛出指定符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53050602/