Résolution des erreurs « Symboles non définis » et « Typeinfo » en C
Rencontre d'erreurs telles que « Symboles non définis » et « Typeinfo » lors de la compilation peut être déroutant. Cet article vise à faire la lumière sur ces erreurs et à apporter une solution.
Comprendre Vtables et Typeinfo
-
Vtable (table de méthodes virtuelle) : Une structure de données contenant des pointeurs vers les méthodes virtuelles d'une classe. Il permet des appels polymorphes à des méthodes virtuelles, où une classe dérivée peut remplacer les méthodes de sa classe de base.
-
Typeinfo : Informations sur le type de classe, telles que son nom et ses méthodes. Ces informations sont utilisées pour l'identification de type dynamique et l'accès aux informations de type d'exécution.
Analyse des erreurs
Le message d'erreur donné indique que les symboles de la table virtuelle de la classe Obstacle et typeinfo sont manquants. Cela peut être dû à plusieurs raisons :
-
Méthodes virtuelles pures manquantes : Une classe de base abstraite nécessite que toutes ses méthodes virtuelles soient déclarées comme « virtuelles pures », c'est-à-dire en utilisant = 0 à la fin de leur déclaration. Si une méthode virtuelle pure n'est pas remplacée par une classe dérivée, cela indique une implémentation manquante.
-
Méthodes non virtuelles non définies : Si une classe de base abstraite contient des fonctions virtuelles non pures, le compilateur suppose qu'ils sont implémentés quelque part. S'ils ne sont pas implémentés, les structures internes nécessaires (vtable et typeinfo) manqueront.
Solution
Pour résoudre l'erreur, vous devez :
-
Déclarer les méthodes virtuelles pures : Assurez-vous que les méthodes virtuelles de la classe Obstacle sont déclarées comme purement virtuelles.
-
Implémentez des méthodes non virtuelles : Si la classe Obstacle contient des fonctions virtuelles non pures, assurez-vous qu'elles sont implémentées dans une classe dérivée.
Une fois ces conditions remplies, le compilateur pourra générer les structures vtable et typeinfo nécessaires. , et l'erreur de compilation devrait être résolue.
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