0

qthread にシグナルを追加しようとしていますが、いくつかのエラーが発生します。

エラー: 「vtable for RFDongleCommunication」への未定義の参照

エラー: 「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

これは非常に古い投稿だと思いますが、人々は今でも非常によく似た、またはまったく同じ質問をし続けているようです。上記の 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 に答える
0

クラスが、MOC プロセス生成に含まれる別の .cpp および .h ファイルにあることを確認してください

クリック: ファイル - 新しいファイルまたはプロジェクト - ファイルとクラス - C++ - 新しいクラス

`vtable への未定義参照は、moc cpp ファイルが生成されないことを意味します。

于 2012-10-29T12:18:25.203 に答える