QObject 出现undefined vtable的解决方法
2015-08-17 19:11
363 查看
问题现象:
将class TestObject声明为
class TestObject:public QObject后
出现链接失败,报告
undefined vtable
分析:
查看其他继承自QObject的情况,并无不妥。
解决方法:
重新qmake一下modem.pro,这时会主动生成moc_文件,此后编译不会有问题。
qmake modem.pro
make
From
http://blog.csdn.net/qinpanke/article/details/8066397
Author:
阿科
关于MOC
moc 全称是 Meta-Object Compiler,也就是“元对象编译器”。Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件。如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件。这个源文件中包含了 Q_OBJECT 宏的实现代码。这个新的文件名字将会是原文件名前面加上 moc_ 构成。这个新的文件同样将进入编译系统,最终被链接到二进制代码中去。因此我们可以知道,这个新的文件不是“替换”掉旧的文件,而是与原文件一起参与编译。另外,我们还可以看出一点,moc
的执行是在预处理器之前。因为预处理器执行之后,Q_OBJECT 宏就不存在了。
将class TestObject声明为
class TestObject:public QObject后
出现链接失败,报告
undefined vtable
分析:
查看其他继承自QObject的情况,并无不妥。
解决方法:
重新qmake一下modem.pro,这时会主动生成moc_文件,此后编译不会有问题。
qmake modem.pro
make
From
http://blog.csdn.net/qinpanke/article/details/8066397
Author:
阿科
关于MOC
moc 全称是 Meta-Object Compiler,也就是“元对象编译器”。Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件。如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件。这个源文件中包含了 Q_OBJECT 宏的实现代码。这个新的文件名字将会是原文件名前面加上 moc_ 构成。这个新的文件同样将进入编译系统,最终被链接到二进制代码中去。因此我们可以知道,这个新的文件不是“替换”掉旧的文件,而是与原文件一起参与编译。另外,我们还可以看出一点,moc
的执行是在预处理器之前。因为预处理器执行之后,Q_OBJECT 宏就不存在了。
相关文章推荐
- Objective-C:NSString类的常见用法
- Objective-C:Foundation框架
- ASP入门(十四)-FileSystemObject 对象
- [caffe]深度学习之CNN检测object detection方法摘要介绍
- Object C学习笔记6-如何在Windows环境搭建Object C开发环境
- 插件开发之无法解释的外部符号 DllCanUnloadNow和DllGetClassObject
- OBjective-C:atomic和nonatomic的区别
- post a json object with an array using curl
- mysql_fetch_row,mysql_fetch_array,mysql_fetch_object,mysql_fetch_assoc
- Objective-C 数据类型定义的标示符(一)
- 给Objective-C的“悼词”
- javascript object 相等判断逻辑
- flex 客户端缓存SharedObject
- org.hibernate.NonUniqueObjectException
- ****Objective-C 中的方法的调用
- android Parcelable 带有数组的对象如何序列化 String[] Long[] int[] Object[]
- 【OC语言】第一篇·Objective-C概述和面向对象
- [Objective-C] 016_UI篇_UIView(上)
- sys_privilege & object_privilege
- foreach遍历----for(object o: list)