Ich musste vor kurzem ein Signal zu einer Klasse hinzufügen, so änderte ich die Klasse von QObject zu erben und fügte das Q_OBJECT-Makro in die Klassendefinition. Da tun, damit ich „Signal undefiniert Referenzfehler für‚VTable für CLIBefehl‘“ Fehler auf der Klassenlinie unter:Qt "Signal undefiniert Referenzfehler" nach dem Erben von 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;
und dem zweiten Fehler „Signal undefiniert Referenzfehler für‚VTable für CLIBefehl‘“ auf der Linie unten (Initialisieren der Membervariable):
// 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)
{
}
und hier gerade ist, wo ich das Signal aussenden. Die emit Linie erzeugt Fehler undefined reference to `CLIBefehl :: 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();
}
ich ein paar Beiträge zu diesem Thema gelesen habe, aber keiner scheint gelten. Ich habe sogar versucht, clean/rebuildall. Ich verwende keine Boost oder andere Bibliotheken ... nur QT 5
Kann mir jemand sagen, was ich falsch mache?
LÖSUNG: Klicken Sie in QT Creator mit der rechten Maustaste auf das Projekt, wählen Sie RUN QMAKE, und erstellen Sie dann alle Komponenten neu. Andere Beiträge über das Ausführen von REBUILD ALL sind falsch ... auf eigene Faust, die qmake nicht ausführen wird.
immer mit einer guten und einfachen Antwort, dank +1 –
Vielleicht ist der einfachste Weg, 'explizit qmake' erneut auszuführen, wenn Qt Creator ist direkt mit dem Build zu gehen und' Makefile' entfernen. Bei der nächsten Aktion "Alles erstellen" wird Qt Creator dann neu generiert, so dass der 'Q_OBJECT'-Änderungslink-Fehler wegfällt. – maxschlepzig