J'ai récemment besoin d'ajouter un signal à une classe, j'ai donc changé la classe pour hériter de QObject et ajouté la macro Q_OBJECT dans la définition de classe. Depuis ce faisant, je reçois « signal d'erreur de référence non définie pour « vtable pour CLICommand » » erreur sur la ligne de classe ci-dessous:Qt "signal erreur de référence indéfinie" après avoir hérité de 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;
et la seconde erreur « erreur de référence non définie du signal pour « vtable pour CLICommand » » sur la ligne ci-dessous (la variable initialisation de membre):
// 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)
{
}
et juste ici est où j'émets le signal. La ligne emit génère l'erreur 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();
}
J'ai lu un tas de messages sur ce sujet, mais aucun ne semble appliquer. J'ai même essayé propre/rebuildall. Je n'utilise pas boost ou d'autres bibliothèques ... juste QT 5
Quelqu'un peut-il me dire ce que je fais mal? SOLUTION: dans QT Creator, faites un clic droit sur le projet, sélectionnez RUN QMAKE, puis reconstruisez tout. Les autres articles sur l'exécution de REBUILD ALL sont incorrects ... en tant que tels, ils ne liront pas qmake.
toujours avec une réponse simple et bonne, merci +1 –
Peut-être la meilleure façon de ré-exécuter explicitement 'qmake' lors de l'utilisation de Qt Creator est d'aller à la construction directement et retirez' Makefile'. Ensuite, lors de la prochaine action 'Build all', Qt Creator le régénère, de sorte que l'erreur de lien liée à la modification de 'Q_OBJECT' disparaisse. – maxschlepzig