我最近需要向类添加一个信号,所以我将类更改为继承自QObject并将Q_OBJECT宏添加到类定义中.由于这样做,我在下面的类别行中得到“’vtable for CLICommand’”信号未定义的引用错误:
// 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;
第二个错误“在’vtable for CLICommand”上发出未定义的引用错误信号”在下面一行(初始化成员变量):
// 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) { }
就在这里我发出信号的地方. emit行生成对`CLICommand :: signal_shutdown_request()’的错误未定义引用:
// 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(); }
我已经阅读了很多关于这个主题的帖子,但似乎都没有适用.我甚至尝试过清洁/重建.我没有使用boost或其他库…只是QT 5
有人能告诉我我做错了什么吗?
解决方案:在QT Creator中,右键单击项目,选择RUN QMAKE,然后重建所有项目.关于运行REBUILD ALL的其他帖子是不正确的……它本身就不会运行qmake.