Référence non définie à Typeinfo : causes et résolution
La redoutable erreur « référence non définie à typeinfo » peut tourmenter les développeurs C, les laissant perplexes quant à ses origines. En arrière-plan, cette erreur survient lorsque l'éditeur de liens tombe sur une déclaration de fonction virtuelle sans sa définition correspondante.
Les fonctions virtuelles sont conçues pour être remplacées dans les classes dérivées, permettant un comportement polymorphe. Cependant, déclarer une fonction virtuelle sans sa définition implique que la définition est ailleurs. Cela oblige l'éditeur de liens à rechercher la définition manquante dans des unités de compilation ou des bibliothèques externes. Si l'éditeur de liens ne parvient pas à le localiser, l'erreur "référence non définie à typeinfo" apparaît.
Considérez cette déclaration :
virtual void fn();
Cette déclaration informe le compilateur que fn() est une fonction virtuelle mais ne fournit pas sa mise en œuvre. L'éditeur de liens signalera cela comme un symbole non résolu lors de l'étape de liaison, ce qui entraînera l'erreur.
Pour rectifier cela, vous devez fournir une définition de la fonction virtuelle :
virtual void fn() { /* Implementation here */ }
En joignant une définition à la déclaration, l'éditeur de liens n'a plus besoin de rechercher un symbole manquant.
Cette erreur est analogue au code suivant extrait :
extern int i; int *pi = &i;
Dans ce cas, i est déclaré comme une variable externe située dans une autre unité de compilation. Cela nécessite que l'éditeur de liens résolve la référence externe, mais s'il ne parvient pas à localiser i, il signalera une erreur de symbole non résolue.
En comprenant la cause fondamentale de l'erreur « référence non définie à typeinfo », les développeurs peuvent rapidement dépanner et résolvez le problème en fournissant des définitions appropriées pour les fonctions virtuelles ou en gérant les références de symboles externes de manière appropriée.
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!