Symboles non définis : "vtable" et "typeinfo"
Dans le code fourni, une erreur de liaison se produit 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
Comprendre "vtable" et "typeinfo"
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 méthodes virtuelles seront fournies et le processus de liaison devrait réussir sans les erreurs de symboles non définies.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3