我最近需要向一个类添加一个信号,所以我将类更改为继承自 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;
和下一行的第二个错误“signal undefined reference error for '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)
{
}
就在这里,我发出信号。发射行生成对 `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();
}
我已经阅读了很多关于这个主题的帖子,但似乎没有一个适用。我什至尝试过 clean/rebuildall。我没有使用 boost 或其他库......只是 QT 5
有人可以告诉我我做错了什么吗?
解决方案:在 QT Creator 中,右键单击项目,选择 RUN QMAKE,然后全部重建。关于运行 REBUILD ALL 的其他帖子不正确......它自己不会运行 qmake。