关于Qt报出Undefined reference to vtable for xxx的问题
前些天无意间遇到这个问题,重新构建还是不行,最后仔细一想就是Qt中的原对象在搞鬼,特此做下笔记。
问题现象:
问题描述:
程序之前运行时完好的,当向其中加入Q_OBJECT后会出现如上问题,程序本省没有错误。
解决方法:
关闭工程,删除影子构建目录,重新打开工程,编译即可!
原因分析:
发生这个问题的原因是因为,Qt中最核心的机制—原对象机制,我们平时写的代码在经过原对象编译器编译后生成中间文件moc_xxx.cpp文件,在该文件中记录了Qt中核心的信号和槽机制,这里会进行相应的处理,而关键的地方是,是否包含Q_OBJECT宏,该宏决定了生成中间文件时的格式,所以需要重新编译原对象编译器才能识别。