10

其中一些错误是通过修改解决的

    virtual void draw();

    virtual void draw() {};

但是,这些错误的其他原因可能是什么?,除了虚拟功能.. 什么可能是以下错误的原因..

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

2 回答 2

12

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

于 2015-02-15T00:36:18.120 回答
7

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

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

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

于 2012-08-10T15:28:35.347 回答