Maison > développement back-end > C++ > le corps du texte

Pourquoi est-ce que j'obtiens des erreurs de symboles non définis \'vtable\' et \'typeinfo\' dans mon code C ?

Susan Sarandon
Libérer: 2024-11-03 15:30:30
original
376 Les gens l'ont consulté

Why Am I Getting

Symboles non définis : "vtable" et "typeinfo"

Dans le code fourni, une erreur de liaison survient avec les messages suivants :

Undefined symbols:
  "vtable for Obstacle", referenced from:
      Obstacle::Obstacle()in Myworld.o
  "typeinfo for Obstacle", referenced from:
      typeinfo for RECTANGLEin RECTANGLE.o
      typeinfo for CIRCLEin CIRCLE.o
Copier après la connexion

Comprendre "vtable" et "typeinfo"

  • vtable (Virtual Method Table) : Une structure de données utilisée par les compilateurs pour stocker des pointeurs vers les méthodes virtuelles d’une classe. Il permet aux objets des classes dérivées d'appeler les implémentations correctes des méthodes virtuelles.
  • typeinfo (Runtime Type Information) : Informations stockées dans la mémoire de l'objet qui identifient le type de l'objet. Il permet la vérification de type dynamique et le comportement polymorphe.

Résoudre l'erreur

La cause première de cette erreur est très probablement que la classe de base abstraite Obstacle contient non -fonctions virtuelles pures. Lorsqu'une classe déclare une fonction virtuelle pure (virtual void Method() = 0;), cela signifie que les classes dérivées doivent remplacer l'implémentation.

Si vous avez défini des fonctions virtuelles non pures dans Obstacle, le compilateur s'attend à trouver leurs implémentations soit dans la classe de base, soit dans les classes dérivées. Cependant, si ces implémentations ne sont pas fournies, le compilateur génère des structures internes (vtable et typeinfo) qui s'appuient sur ces fonctions. Lors de la liaison, les fonctions manquantes entraînent des erreurs de symbole non défini.

Solution

Pour résoudre ce problème, assurez-vous que toutes les méthodes virtuelles de la classe de base abstraite Obstacle sont déclarées comme de pures fonctions virtuelles. Cela oblige les classes dérivées à remplacer et à implémenter ces méthodes. Ce faisant, les implémentations correctes de la méthode virtuelle seront fournies et le processus de liaison devrait réussir sans les erreurs de symboles non définies.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!