文章目录
undefined reference to vtable
问题描述:在某一个类中,如果加入Q_OBJECT
,则link
时会提示undefined reference to vtable for "xxx::xxx"
。可是删掉Q_OBJECT
,再编译程序时,Qt
的应用程序输出中又会显示Object::connect: No such slot XXX::XXX()
。
原因:删除Q_OBJECT
之后,该类的信号槽机制就失效了,因此在其他类中connect
该类的槽时,就会显示No such slot...
。在该类中加上Q_OBJECT
之后,link
提示undefined reference to vtable for "xxx::xxx"
。如果不是语法错误,那么可能的原因是该类原来没有添加Q_OBJECT
,则在程序输出目录中,由qmake
生成的makefile
文件里不存在编译Q_OBJECT
的信息,因此信号槽机制失效。而在该类加上Q_OBJECT
后,Qt Creator
没有自动执行qmake
来更新makefile
文件,这就会在link
时有上述错误。
解决办法:删除程序的输出目录build-XXX-XXX-release
,重新构建项目就行了。
gcc warning will be initialized after [-Wreorder]
构造函数时,初始化成员变量的顺序要与类声明中的变量顺序相对应。若不对应,则出现题目中的错误。解决方法就是按照顺序进行初始化。对于这个问题,StackOverflow
上也发生了讨论,以下摘录原文:
Question: I am getting a lot of these warnings from 3rd
party code that I cannot modify. Is there a way to disable this warning or at least disable it for certain areas (like #pragma push/pop
in VC++
)?
list.h