Maison >développement back-end >C++ >Pourquoi g produit-il des erreurs « Référence non définie à typeinfo » ?

Pourquoi g produit-il des erreurs « Référence non définie à typeinfo » ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-03 06:18:10306parcourir

Why Does g   Produce

G : Comprendre les erreurs "Référence non définie à Typeinfo"

L'erreur "Référence non définie à typeinfo" est souvent rencontrée lors de la compilation de programmes C avec g. Cela signifie que l'éditeur de liens ne peut pas trouver les informations de type pour une classe particulière, ce qui peut avoir plusieurs causes.

Cause : Déclaration de fonctions virtuelles sans définitions

Une raison courante pour cette erreur déclare des fonctions virtuelles sans fournir leurs définitions dans la même unité de compilation. Lorsque vous déclarez une fonction virtuelle sans la définir, vous suggérez que sa définition existe ailleurs, soit dans des unités de compilation ultérieures, soit dans des bibliothèques externes.

Ainsi, lors de la phase de liaison, le compilateur recherche la définition de la fonction virtuelle dans d'autres fichiers objets ou bibliothèques. S'il ne parvient pas à localiser la définition, il génère l'erreur "référence non définie à typeinfo".

Exemple : Déclaration incorrecte

virtual void fn();

Cette déclaration informe le compilateur qu'un la fonction virtuelle nommée fn() existe, mais elle ne fournit pas d'implémentation concrète.

Exemple : Correct Définition

virtual void fn() { /* Implementation code here */ }

Lorsque vous fournissez une définition à la fonction virtuelle, l'éditeur de liens n'a plus besoin de la rechercher ailleurs, résolvant ainsi l'erreur.

Analogie : Externe Résolution des variables

Le comportement revient à déclarer une variable externe dans une unité de compilation et à tenter d'y accéder dans une autre unité sans fournir de réponse explicite. définition :

extern int i;
int *pi = &i;

Ici, la variable i est déclarée en externe, indiquant que sa définition se trouve dans une autre unité de compilation. Si cette définition n'est pas disponible au moment de la liaison, le compilateur générera une erreur « référence non définie ».

Comprendre la cause première de cette erreur est crucial pour l'éviter et garantir une compilation réussie de votre code C.

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