Niedawno musiałem dodać sygnał do klasy, więc zmieniłem klasę na dziedziczkę z QObject i dodałem makro Q_OBJECT do definicji klasy. Ponieważ ten sposób uzyskać „sygnału niezdefiniowany błąd odniesienia dla«vtable dla CLICommand»” błędu na linii klasy poniżej:Qt "błąd niezdefiniowanego sygnału odniesienia" po odziedziczeniu z QObject
// File clicommand.h
#include <QString>
#include <QStringList>
#include <QTcpSocket>
#include "telnetthread.h"
class CLICommand : public QObject
{
Q_OBJECT
public:
CLICommand(TelnetThread *parentTelnetThread);
signals:
void signal_shutdown_request();
private:
TelnetThread *m_parentTelnetThread;
i „sygnału nieokreślonym błędem odniesienia dla«vtable dla CLICommand»” Drugi błąd w wierszu poniżej (intializing zmienną member):
// File clicommand.cpp
#include <QDebug>
#include <QTcpSocket>
#include <QTextStream>
#include "version.h"
#include "clicommand.h"
#include "telnetthread.h"
#include "logger.h"
CLICommand::CLICommand(TelnetThread *parentTelnetThread)
: m_parentTelnetThread(parentTelnetThread)
{
}
i właśnie tutaj jest miejsce, gdzie emituje sygnał. Linia emitować generuje błąd niezdefiniowanej odniesienie do `CLICommand :: signal_shutdown_request()”:
// file shutdown_clicommand.cpp
#include <QIODevice>
#include "clicommand.h"
#include "logger.h"
#include "version.h"
void CLICommand::execute_shutdown(const QStringList &commandLineFragments)
{
emit signal_shutdown_request();
}
czytałem kilka postów na ten temat, ale nikt wydaje się mieć zastosowanie. Próbowałem nawet czyszczenia/przebudowy. Nie używam boost lub innych bibliotek ... tylko QT 5
Czy ktoś może mi powiedzieć, co robię źle?
ROZWIĄZANIE: w Qt Creator, kliknij prawym przyciskiem myszy projekt, wybierz Uruchom QMake, a następnie odbudować wszystko. Inne posty na temat uruchamiania REBUILD ALL są niepoprawne ... na własną rękę, które NIE uruchomią qmake.
zawsze z dobrą i prostą odpowiedź, dzięki +1 –
Być może najprostszym sposobem, aby ponownie uruchomić 'qmake' jawnie przy użyciu Qt Creator jest, aby przejść do kompilacji bezpośrednio i usunąć' Makefile'. Następnie, przy następnej akcji "Zbuduj wszystko", Qt Creator zregeneruje ją tak, że błąd związany z zmianą powiązania 'Q_OBJECT' zniknie. – maxschlepzig