在使用qt的时候,常常为了实现的需求将一些类隐藏在cpp中文件实现,而这些类又需要一些qt自己的机制支持如Q_OBJECT宏。于是在编译的时候,很可能出现像undefined reference to vtable for "xxx::xxx"的问题,这其实是由于qt不会自动moc cpp文件。参考qt的文档,发现最简单的方法就是用qmake重新生成makefile文件就可以了。另外就是直接把该类写在.h文件里面在编译。
如果需要自己重新写makefile,qt文档给出了以下的方法
For Q_OBJECT class declarations in header files, here is a useful makefile rule if you only use GNU make:

在Qt开发中,当Q_OBJECT宏用于cpp文件时,可能会遇到编译错误'undefined reference to vtable'。解决方法是通过qmake重新生成makefile,或者手动添加makefile规则。对于cpp文件,可以添加`foo.o: foo.moc`和`foo.moc: foo.cpp`的规则,并在cpp文件末尾包含`#include "foo.moc"`。对于qtopia项目,需要先`make clean`,删除makefile,再用qtopiamake,最后make才能避免错误。
最低0.47元/天 解锁文章
411

被折叠的 条评论
为什么被折叠?



