菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
212
0

QT无法解析的外部符号 "public: virtual struct QMetaObject const TPickThread::metaObject(void)const " (?metaObject@TPickThread@@UEBAPEBUQMetaObject@@XZ)

原创
05/13 14:22
阅读数 7420

相关资料:

https://blog.csdn.net/ganggegel/article/details/79174307   

问题现象:
在写的QT程序中增加了一个线程类,并在类中写了一个信号,增加了Q_OBJECT宏,但是在编译时提示"public: virtual struct QMetaObject const TPickThread::metaObject(void)const " (?metaObject@TPickThread@@UEBAPEBUQMetaObject@@XZ)

查找原因:
1. 是否加上了Q_OBJECT宏?
2. 你的widget里用到signal slot了吧?(也许是后续加的)
3. 类定义在cpp里了? 没有相应的.h文件?
4. 如果以前没信号槽新加的, 那么makefile需要重新生成。

总结原因如下:
vs在编译时会产生一系列的命令以控制该.h、.cpp文件的编译过程,并且,以后不会自动修改这些命令。
利用Qt编程时,写好.h、.cpp文件并第一次编译之后,若.h文件中定义类时没有添加Q_OBJECT宏以及信号函数、槽函数,VS编译命令中就没有moc命令,就不会调用Qt的moc工具以生成moc_*.cpp文件;并且即使添加了Q_OBJECT宏之后,VS也不会自动添加moc命令,因而不会生成moc文件。
VS在LINK时,找不到moc文件,就出现了error LNK2001的错误。

解决方法:
1.如果没有使用到信号和槽,可以去掉Q_OBJECT宏;
2.如果要用到信号和槽,添加了Q_OBJECT,要重新make一下项目,即可

发表评论

0/200
212 点赞
0 评论
收藏