Archive for 19 3 月, 2013

关于 undefined reference to `vtable for 。。。。。。。。’的错误解决方法

19 3 月, 2013

最近碰上这个问题,无论GNU C/C++ 4.7.2还是LLVM Clang 3.2都会报,在网上查了许多资料,基本内容一样,但也基本都没有真正命中这个错误的起因。

这句英文的本意是无法产生虚拟函数映射表,那么原因肯定就是有虚拟的函数不存在。但为什么会不存在?那当然是没有写了。

所以,解决的办法就是检测你报错的类中,是否真正的实现了所有在本类中定义的派生函数。如果仅在.h中定义,而没有在.cpp中实现,就会报这个错误。

举个例子,以及代码中,B类就会报如上错误。

class Base
{
virtual void func();
};

class A:public Base
{
//没有定义,使用基类的
};

class B:public Base
{
void func(); //定义了,但没有实现
};

鄂ICP备09027626号