0

我收到这个错误

/.../mainwindow.o:-1: In function `MainWindow::MainWindow(QWidget*)':
/.../mainwindow.cpp:-1: Chyba:undefined reference to `vtable for Msnger'

我不明白为什么。我发现导致此消息的唯一问题是没有定义的声明,我在我的代码中看不到任何这些。

这是 Msnger msnger.h 类:

#include <QObject>

class Msnger : public QObject
{
    Q_OBJECT

public:
    Msnger() {};
    ~Msnger() {};
    void sendOn();
signals:
    void ton() {};
};

msnger.cpp:

#include "msnger.h"

void Msnger::sendOn()
{
    emit ton();
}

Msnger 应该向我的主窗口发送消息

在 mainWindow 的构造函数中:

msn = new Msnger();
connect(msn, SIGNAL(ton()),this, SLOT(on()));

其中 msn 是:

public: Msnger * msn

你能解释一下是什么原因造成的,我该如何解决?

4

2 回答 2

6

您的问题是moc没有在您的文件上运行,或者它的结果没有被链接。

黄金法则是:

  1. 确保Q_OBJECT宏存在于所有QObject派生类的定义中。
  2. 确保只在头文件中声明您的QObject派生类。
  3. 确保所有头文件都列在HEADERS=列表中的 .pro 文件中。
  4. qmake每次添加Q_OBJECT到类之一或修改.pro文件时运行。

附录:

signals:
    void ton() {};

不要实现信号。moc将为您实施。

于 2013-11-02T14:33:17.017 回答
1

不确定你的编译器。

确保Qt Meta 编译器正在为定义 Msnger 类的头文件运行。生成的 moc_* cpp 文件将使用您的编译器进行编译。

PS。当 QObject 继承的类名称以“Q”开头时很好,例如 QMsnger

于 2013-11-02T13:42:23.363 回答