这个错误是什么意思?我该如何解决?这是导致它的 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/

10-14 14:23