我收到此错误
/.../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发送消息
在mainWindow的构造函数中:
msn = new Msnger();
connect(msn, SIGNAL(ton()),this, SLOT(on()));
其中msn是:
public: Msnger * msn
你能解释一下造成这种情况的原因以及如何解决这个问题?
答案 0 :(得分:5)
您的问题是moc
没有在您的文件上运行,或者其结果未被链接。
黄金法则是:
Q_OBJECT
派生类的定义中都存在QObject
宏。 QObject
- 派生类。 HEADERS=
列表的.pro文件中。 qmake
添加到其中一个班级或修改Q_OBJECT
文件时,请运行.pro
。附录:
signals:
void ton() {};
不要实施信号。 moc
会为您实施。
答案 1 :(得分:1)
不确定您的编译器。
确保Qt Meta compiler正在为定义了Msnger类的头文件运行。生成的moc_ * cpp文件是用您的编译器编译的。
PS。当QObject继承类名称以'Q'开头时,这是很好的,例如QMsnger