C++:除了虚函数之外,对[class name]''的typeinfo的未定义引用有什么原因

wol*_*ang 9 c++

其中一些错误可以通过修改来解决

    virtual void draw();
Run Code Online (Sandbox Code Playgroud)

    virtual void draw() {};
Run Code Online (Sandbox Code Playgroud)

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

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

Pet*_*eng 11

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


Dav*_*e S 5

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

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

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