Qt,线程中发射信号的问题 undefined reference

发布于 2022-09-01 12:03:49 字数 1289 浏览 18 评论 0

在生产者消费者模型的线程类中发射signal,主线程接收到信号显示到界面,没想到构建时候会报错。。。去stackoverflow搜索下了也没有什么好的结果。。。各位看是什么原因

.h文件

#ifndef CENTERQTHREAD_H
#define CENTERQTHREAD_H

#include <QThread>

class centerThread : public QThread
{
public:
    centerThread();
    ~centerThread();
    void run();
    void sendfunc(QString str);
signals:
    void MsgSignal(const QString& tep);
    void showMsg(int a);
public slots:
private:
    int id;
};
#endif // CENTERQTHREAD_H

.cpp文件

#include "centerthread.h"
#include <QDebug>
#include <QWaitCondition>
#include <QMutex>
/*.....
省略若干不必要的代码
*/
void centerThread::sendfunc(QString str)
{
    emit showMsg(2);
}
E:\source\QT\qt_test\\centerthread.cpp:58: error: undefined reference to `centerThread::showMsg(int)'

win 7 32bit
Qt版本:3.1.1

clipboard.png
结果(已解决,过程如下):
最后解决了,参照一楼说的,qmake并没有报错,估计是编译连接的问题,我把emit语句写在函数里,直接在头文件里面定义里实现这个函数就没问题了。

1 千荒 · 16 分钟前

补充,然而事情还没有结束,每当我在run里调用的时候还是会报这个错误

2 千荒 · 刚刚

然而事情还是解决了,虽然不明白是怎么回事,但是,首先不要使用cpp文件,把实现全部写在头文件就可以了。也是参考官方QThread文档才找到的解决方法。

3 千荒 · 刚刚

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

音栖息无 2022-09-08 12:03:49

确定代码没有问题的话,试试: build -> run qmake
cherrysd,的确发现了另外一个问题;但是如果没有宏的话,错误提示大多是:
error: Class declaration lacks Q_OBJECT macro.

坏尐絯 2022-09-08 12:03:49

首先你这个代码定义了信号,但是你并没有使用Q_OBJECT这个宏。

据我的一个不太权威的猜测:你直接run肯定是会报错的。因为如果你代码有这个宏,Qt是要在编译之前先额外处理一下,就是生成的MOC_xxxx.cpp这种东西。实际上,信号的实现应该在那里。如果你没有这个处理的话,没有这个文件,信号的函数自然是未定义的。想追本溯源的话,还是要看看那个处理机制是怎么回事。

因为我没有用过qmake所以并不是很清楚这个qmake是怎么运行的。但我想他应该会帮你生成MOC这种东西吧。

不喜欢何必死缠烂打 2022-09-08 12:03:49

Q_OBJECT 添加上,再删除原来构建的文件夹,重新构建即可。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文