Я получаю эту ошибку
/.../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
Можете ли вы объяснить мне, что это значит, и как я могу это исправить?
Ваша проблема в том, что moc
не запускается в ваших файлах, или его результат не связан.
Золотые правила:
Q_OBJECT
присутствует в определении всех классов QObject
-derived.QObject
-derived классы только в файлах заголовков.HEADERS=
.qmake
каждый раз, когда вы добавляете Q_OBJECT
в один из ваших классов или изменяете свой .pro
файл.Приложение:
signals:
void ton() {};
Не используйте сигнал. moc
выполнит его для вас.
Не уверен в вашем компиляторе.
Убедитесь, что компилятор Qt Meta запущен для файла заголовка, где определен класс Msnger. И полученный файл moc_ * cpp скомпилируется с вашим компилятором.
PS. Хорошо, когда имена классов, наследуемых классами QObject, начинаются с "Q", например, QMsnger