C++ C++;链接器失败,因为我添加了一个抛出

C++ C++;链接器失败,因为我添加了一个抛出,c++,exception-handling,linker,throw,C++,Exception Handling,Linker,Throw,嗯,发生在我身上的事情真的很奇怪,但我会尽量说清楚的。 我有一个类,在一个方法中我决定抛出(在hpp定义和cpp实现中)。 所以我有一个可以抛出std::exception的方法。 这里没问题 我创建了一个例外: class MyException : public std::exception { public: MyException() throw(); ~MyException() throw(); const char what() const throw(); }

嗯,发生在我身上的事情真的很奇怪,但我会尽量说清楚的。 我有一个类,在一个方法中我决定抛出(在hpp定义和cpp实现中)。 所以我有一个可以抛出std::exception的方法。 这里没问题

我创建了一个例外:

class MyException : public std::exception {
public:
   MyException() throw();
   ~MyException() throw();
   const char what() const throw();
}
好的,让我们在我的方法中使用它 发件人:

致:

好的! 这就是我得到的

/tmp/ccwSS5GE.o:(.gcc_除_表外+0x84): 对“类型信息”的未定义引用,用于 MyException“collect2:ld返回1 退出状态

为什么??
除了std::exception,一切正常,现在什么都不正常。

我认为OP代码应该给出一个编译错误,因为它的格式不正确,并且不在UB区域(这可能解释链接器错误,这在这里是令人惊讶的)

我想问题在于你的申报

const char what() const throw();
类中的返回类型“const char”与定义为

virtual const char* std::exception::what()  const throw () 

. 特别检查-如果你仍然无法解决它,请向我们展示你所有的代码以及你如何尝试使用它。链接器没有崩溃。它只是报告了程序中的错误。链接顺序在unix中起作用。试试看?谢谢你的建议。对不起,我打错了字符,这是一个字符*!!好的,最后我可以解决它,但奇怪的是,我没有为这些方法创建一个包含实现的cpp文件,这可能会导致编译器非常生气,因为当遇到抛出并查找该异常类型的元素时,他没有找到一个好的实现,并且发疯了。你认为这是一个很好的解释吗?
const char what() const throw();
virtual const char* std::exception::what()  const throw ()