嗯,我发生的事情真的很奇怪,但我会尽力说清楚。 我有一个类,在一个方法中我决定放一个throw(在hpp定义和cpp实现中)。 所以我有我的方法,可以抛出一个std :: exception。 这没问题。
我创建了一个例外:
class MyException : public std::exception {
public:
MyException() throw();
~MyException() throw();
const char what() const throw();
}
好吧,让我们在我的方法中使用它
从:
class myclass {
void mymethod() throw(std::exception);
}
要:
class myclass {
void mymethod() throw(MyException); // I have included hpp file where MyException is defined
}
OK! 这就是我得到的
/tmp/ccwSS5GE.o :( gcc_except_table +的0x84)。: 未定义的'typeinfo for MyException'collect2:ld返回1 退出状态
WHY ?? 使用std :: exception一切正常,现在一切正常。
答案 0 :(得分:2)
我认为OP代码应该给出编译错误,因为它是格式错误的而不是在UB区域(这可能解释链接器错误,这在这里是令人惊讶的)。
我想问题是你的声明。
const char what() const throw();
类中的返回类型'const char'与基类std :: exception中的返回类型不一致,后者定义为
virtual const char* std::exception::what() const throw ()