Erreur « référence non définie à vtable » lors de l'utilisation de Q_OBJECT
L'erreur « référence non définie à vtable » se produit lorsque l'éditeur de liens ne parvient pas à trouver la table de fonctions virtuelles (vtable) pour une classe qui hérite de QObject et déclare la macro Q_OBJECT. Cette erreur peut survenir pour plusieurs raisons.
Causes possibles :
-
Unité MOC manquante : Le MOC (compilateur de méta-objets) génère un fichier unité distinct qui contient l'implémentation de la fonctionnalité liée à QObject. Assurez-vous que l'unité générée par MOC est incluse dans le processus de liaison.
-
Déclaration de classe dans le fichier d'implémentation : Placez la déclaration de classe dans un fichier d'en-tête séparé au lieu du fichier d'implémentation. Le système de build n'analyse peut-être pas les fichiers d'implémentation pour le traitement MOC.
-
Invocation qmake manquante : Qmake génère les règles de construction nécessaires au MOC. Si la classe n'appartenait pas initialement au système de méta-objets Qt, exécutez à nouveau qmake pour mettre à jour son horodatage et déclencher son exécution.
Solution :
Pour résoudre ce problème, suivez ces étapes :
- Déplacez la déclaration de classe vers un fichier d'en-tête distinct.
- Exécutez "Exécuter qmake" depuis le menu contextuel du projet dans Qt Creator ou manuellement mettez à jour l'horodatage du fichier de projet pour forcer l'invocation de qmake.
- Assurez-vous que l'unité MOC générée est incluse dans le processus de liaison.
Ces mesures devraient éliminer l'erreur « référence non définie à la table virtuelle » et laissez votre code se compiler avec succès.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!