C++:除虚函数外," undefined reference to 'typeinfo for [class name]' "的原因是什么


其中一些

错误可以通过修改来解决

    virtual void draw();

    virtual void draw() {};

但是,除了虚函数之外,这些错误的其他原因是什么?导致以下错误的原因是什么。.

  /tmp/cciGEgp5.o:(.rodata._ZTI14CustomXmppPump[typeinfo for CustomXmppPump]+0x18): 
  undefined reference to `typeinfo for XmppPump'

如果你使用 RTTI (-frtti) 编译,请确保你的依赖库也是用它编译的,而不是 -fno-rtti。否则,当您对使用 -fno-rtti 编译的类进行子类或使用 dynamic_cast 时,将收到 typeinfo 错误。

在 GCC 中,第一个非内联虚拟方法用于确定创建 vtable 和 typeinfo 对象的翻译单元。 如果您随后不定义该方法,则会产生您看到的错误,因为它期望您在某处定义该方法,并等待该定义发出该类的 vtable 和 typeinfo 的输出。

http://gcc.gnu.org/onlinedocs/gcc/Vague-Linkage.html

当您将virtual void draw();声明更改为 virtual void draw() {}; 的内联定义时,它会选择一个不同的函数来发出 vtable。

最新更新