错误可以通过修改来解决
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。