最近クラスに信号を追加する必要があったので、QObjectから継承するようにクラスを変更し、Q_OBJECTマクロをクラス定義に追加しました。QObjectから継承した後のQt "signal undefined reference error"
// File clicommand.h
#include <QString>
#include <QStringList>
#include <QTcpSocket>
#include "telnetthread.h"
class CLICommand : public QObject
{
Q_OBJECT
public:
CLICommand(TelnetThread *parentTelnetThread);
signals:
void signal_shutdown_request();
private:
TelnetThread *m_parentTelnetThread;
と2番目のエラー「『CLICommandためのvtable』の信号未定義の参照エラー」:そうするので、私は以下のクラスのライン上のエラー「『CLICommandためのvtable』の信号未定義の参照エラー」を取得します(メンバ変数をintializing)下の行に:I信号を発する場合
// File clicommand.cpp
#include <QDebug>
#include <QTcpSocket>
#include <QTextStream>
#include "version.h"
#include "clicommand.h"
#include "telnetthread.h"
#include "logger.h"
CLICommand::CLICommand(TelnetThread *parentTelnetThread)
: m_parentTelnetThread(parentTelnetThread)
{
}
とちょうどここにあります。
// file shutdown_clicommand.cpp
#include <QIODevice>
#include "clicommand.h"
#include "logger.h"
#include "version.h"
void CLICommand::execute_shutdown(const QStringList &commandLineFragments)
{
emit signal_shutdown_request();
}
私はこのトピックに関する記事の束を読んだが、いずれも適用されているように見えるん:EMITラインは `CLICommand :: signal_shutdown_request()」にエラー未定義の参照を生成します。私はクリーン/再構築を試みました。私はブーストや他のライブラリを使用していません...ちょうどQT 5
私が間違っていることを誰かに教えてもらえますか?
解決策:QT Creatorでは、プロジェクトを右クリックし、「QAMKEを実行」を選択してすべてを再構築します。 REBUILD ALLの実行に関する他の投稿は間違っています...それはqmakeを実行しない自分のものです。
、Qtの創造主を使用している場合、明示的に 'qmake'を再実行するためのおかげで1 –
おそらく最も簡単な方法は、直接ビルドに行き、' Makefile'を削除することです。次に、次の 'すべてビルド'アクションでQt Creatorがそれを再生成し、 'Q_OBJECT'の変更関連リンクエラーがなくなります。 – maxschlepzig