关于 undefined reference to vtable 的一个小小的总结
1.原因一:基类中的析构函数或构造函数没有函数实现
2.原因二:如果你的析构函数有函数体,但是还是报这个错误,检查一下是否是inline的函数定义,可以尝试将函数实现放在.cpp文件里,不要放在.h中。
3.原因三:如果上面都没有违背。。。。额。。。我就是这么苦逼!
最终我是歪打正着解决问题滴。。。
情况描述,有个基类M , 子类A1,A2 都继承了M。。。 现在A1和A2的代码,除了类名不一样之外,其余均同。
M的函数都有函数体实现,放在对应的cpp文件,因此没有满足1,2.。。
A1.h有这样一个的代码:
A1(bool ap = false):M(false),mlen(0){}
~A1(); 析构函数在.cpp文件中有实现。
A1可以编译通过,但加入A2后,完全一样的结构代码就是报vtable的错误。崩溃中。
把A2的实现挪到.cpp中不报vtable的错误,但是报 underference to A2(bool )错误。
即变为:
.h
A2(bool ap=false);
.cpp
A2(bool ap):MM(false),mlen(0)
{
}
最后证明是因为A2.cpp 和A2.h没有加入到工程中选中debug 和 release的缘故。。。。如图右键.h/.cpp 文件,properties...->build 勾选上。
(⊙_⊙) 这种vtable相关的错误倒是头一回看见 O(∩_∩)O哈哈~ 解决了就好了。不过自己也太大意了。。。。以后多注意!
参考以下网址
http://www.parashift.com/c++-faq-lite/link-errs-missing-vtable.html
http://bytes.com/topic/c/answers/157797-undefined-reference-vtable-base