Search code examples
c++qtvtable

Qt undefined reference to `vtable for Msnger'


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?


Solution

  • Your problem is that moc is not being run on your files, or its result is not getting linked.

    The golden rules are:

    1. Make sure the Q_OBJECT macro is present in the definition of all QObject-derived classes.
    2. Make sure you declare your QObject-derived classes in your header files only.
    3. Make sure all of your header files are listed in your .pro file in the HEADERS= list.
    4. Run 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.