C++ C++;链接器失败,因为我添加了一个抛出
嗯,发生在我身上的事情真的很奇怪,但我会尽量说清楚的。 我有一个类,在一个方法中我决定抛出(在hpp定义和cpp实现中)。 所以我有一个可以抛出std::exception的方法。 这里没问题 我创建了一个例外: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(); }
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 ()