codeblocks undefined reference to vtable (非QT)

来源:互联网 发布:淘宝网购物女童鞋 编辑:程序博客网 时间:2024/05/29 16:30

关于 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://stackoverflow.com/questions/1095298/gcc-c-linker-errors-undefined-reference-to-vtable-for-xxx-undefined-refere

 

http://bytes.com/topic/c/answers/157797-undefined-reference-vtable-base