0

我正在尝试向我的 qthread 添加信号,但出现一些错误:

错误:未定义对“RFDongleCommunication 的 vtable”的引用

错误:未定义对“RFDongleCommunication::newLogger(unsigned char, unsigned char)”的引用

这是我的头文件:

#ifndef RFDONGLECOMMUNICATION_H
#define RFDONGLECOMMUNICATION_H
#include <QThread>
#include "qextserialport.h"
#include <QtGui>

class RFDongleCommunication: public QThread
{
    Q_OBJECT

public:
    explicit RFDongleCommunication(QextSerialPort * port);

    QextSerialPort * rfport;
    QByteArray data;

signals:

    void newLogger(uchar,uchar);

private:

    void run();

};

#endif // RFDONGLECOMMUNICATION_H

和cpp文件

#include "rfdonglecommunication.h"
#include "QDebug"

RFDongleCommunication::RFDongleCommunication(QextSerialPort * port)
{
    rfport=port;
}

void RFDongleCommunication::run()
{
    while(!(rfport->bytesAvailable()));
    data = rfport->readAll();

    uchar id = data[1];
    uchar type = data[2];
    emit newLogger(id,type); 
}

有人看到我做错了吗?

4

2 回答 2

0

确保您的课程位于 MOC 流程生成中包含的不同 .cpp 和 .h 文件中

点击:文件——新建文件或项目——文件和类——C++——新建类

undefined 对 `vtable的引用意味着没有生成 moc cpp 文件。

于 2012-10-29T12:18:25.203 回答
0

我看到这是一个非常古老的帖子,但似乎人们仍然在问非常相似甚至完全相同的问题。我会稍微详细说明一下Rudolfs Bundulis给出的答案,希望对您有所帮助。

如果您使用的是 Qt Creator,并且当您第一次编译项目时,您没有将“Q_OBJECT”放在头文件中,那么您的 (qthread) cpp 文件的 moc cpp 文件不会生成。在这种情况下,将“Q_OBJECT”放入头文件后简单地运行“Clean All”和“Rebuild All”将不起作用。你需要去你的构建文件夹手动删除Qt生成的“Makefile”并再次运行“Rebuild All”或“Build All”,你的错误信息就会消失。

于 2015-11-18T08:41:44.337 回答