我得到这个错误

/.../mainwindow.o:-1: In function `MainWindow::MainWindow(QWidget*)':
/.../mainwindow.cpp:-1: Chyba:undefined reference to `vtable for 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


您能否向我解释是什么原因造成的?如何解决?

最佳答案

您的问题是moc未在文件上运行,或者其结果未链接。

黄金法则是:


确保所有Q_OBJECT派生类的定义中都包含QObject宏。
确保仅在头文件中声明源自QObject的类。
确保所有头文件都列在HEADERS=列表中的.pro文件中。
每次将qmake添加到一个类或修改Q_OBJECT文件时,都运行.pro




附录:

signals:
    void ton() {};


不要执行信号。 moc将为您实现它。

关于c++ - Qt对`vtable for Messenger'的 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19742466/

10-11 12:13