문제

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?

도움이 되었습니까?

해결책

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.

다른 팁

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top