Di recente ho avuto bisogno di aggiungere un segnale a una classe, quindi ho cambiato la classe in eredita da QObject e aggiunto la macro Q_OBJECT nella definizione della classe. Dal momento che così facendo ho "errore di riferimento del segnale non definito per 'vtable per CLICommand'" errore sulla linea di classe inferiore:Qt "errore di riferimento non definito del segnale" dopo aver ereditato da 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;
e l ' "errore segnale di riferimento definito per 'vtable per CLICommand'" secondo errore sulla linea in basso (INIZIALIZZA la variabile membro):
// 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)
{
}
e proprio qui è dove emettono il segnale. La linea Emit genera l'errore undefined reference to `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();
}
Ho letto un sacco di messaggi su questo argomento, ma nessuno sembra applicarsi. Ho persino provato a pulire/ricostruire. Non sto usando boost o altre librerie ... solo QT 5
Qualcuno può dirmi cosa sto facendo male?
SOLUZIONE: in Qt Creator, cliccare a destra il progetto, selezionare RUN qmake, quindi rigenerare tutti. Altri post sull'esecuzione di REBUILD ALL non sono corretti ... in proprio non eseguiranno qmake.
sempre con una risposta buona e semplice, grazie +1 –
Forse il modo più semplice per eseguire nuovamente esplicitamente 'qmake' quando si usa Qt Creator è quello di andare alla costruzione direttamente e rimuovere' Makefile'. Quindi, nella prossima azione 'Costruisci tutto', Qt Creator lo rigenera, in modo tale che l'errore di collegamento relativo al cambio di 'Q_OBJECT' scompaia. – maxschlepzig