Reputation: 65
I get this error
/.../mainwindow.o:-1: In function `MainWindow::MainWindow(QWidget*)':
/.../mainwindow.cpp:-1: Chyba:undefined reference to `vtable for Msnger'
and i dont understand why. Only problems i found causing this message are declaration without definition and i dont see any of theese in my code.
here is class 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 is supposed to send message to my Mainwindow
in constructor of mainWindow:
msn = new Msnger();
connect(msn, SIGNAL(ton()),this, SLOT(on()));
where msn is:
public: Msnger * msn
can you pls explain to me what's causing this and how can I fix it?
Upvotes: 0
Views: 333
Reputation: 22796
Your problem is that moc
is not being run on your files, or its result is not getting linked.
The golden rules are:
Q_OBJECT
macro is present in the definition of all QObject
-derived classes. QObject
-derived classes in your header files only. HEADERS=
list. qmake
every time you add Q_OBJECT
to one of your classes or modify your .pro
file.Addendum:
signals:
void ton() {};
Do not implement a signal. moc
will implement it for you.
Upvotes: 6
Reputation: 303
Not sure about your compiler.
Make sure that Qt Meta compiler is running for the header file where Msnger class is defined. And the resulting moc_* cpp file is compiled with your compiler.
PS. It's good when QObject inherited classes names start with 'Q' e.g. QMsnger
Upvotes: 1