Maison  >  Article  >  développement back-end  >  Pourquoi est-ce que je reçois une erreur \"\'référence non définie à vtable\'\" lors de l'utilisation de Q_OBJECT ?

Pourquoi est-ce que je reçois une erreur \"\'référence non définie à vtable\'\" lors de l'utilisation de Q_OBJECT ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 07:30:03272parcourir

Why am I getting an

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 :

  1. Déplacez la déclaration de classe vers un fichier d'en-tête distinct.
  2. 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.
  3. 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn