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

时间:2010-11-26 00:04:23

标签: c++ exception-handling linker throw

嗯,我发生的事情真的很奇怪,但我会尽力说清楚。 我有一个类,在一个方法中我决定放一个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一切正常,现在一切正常。

1 个答案:

答案 0 :(得分:2)

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

我想问题是你的声明。

const char what() const throw();

类中的返回类型'const char'与基类std :: exception中的返回类型不一致,后者定义为

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