【发布时间】:2013-10-10 23:17:35
【问题描述】:
我最近需要给一个类添加一个信号,所以我把这个类改成继承自QObject,并将Q_OBJECT宏添加到类定义中。由于这样做,我在下面的类行中收到 "signal undefined reference error for '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)
{
}
这里就是我发出信号的地方。发射行生成错误undefined reference to `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。
【问题讨论】:
标签: c++ qt qtcore qt-signals moc