Maison >développement back-end >C++ >Pourquoi est-ce que j'obtiens des erreurs « Symbole externe non résolu » lorsque j'utilise du code C modélisé ?

Pourquoi est-ce que j'obtiens des erreurs « Symbole externe non résolu » lorsque j'utilise du code C modélisé ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-17 19:48:11915parcourir

Why Do I Get

Symboles externes non résolus dans le code C basé sur un modèle

Lorsque vous travaillez avec des classes et des fonctions basées sur un modèle en C, diviser le code entre une source ( .cpp) et le fichier d'en-tête (.h) peuvent entraîner des erreurs de « symbole externe non résolu » lors de la liaison. Cela peut être déroutant, surtout lorsque le fichier objet a été construit et inclus.

Comprendre le problème

Les modèles ne sont pas instanciés tant qu'ils ne sont pas utilisés. Cela signifie que lorsque le compilateur rencontre un modèle, il ne génère pas immédiatement le code correspondant. Au lieu de cela, il suppose que la définition de fonction existe ailleurs et insère un espace réservé.

Cependant, si la définition de fonction est placée dans un fichier source distinct, le compilateur peut ne pas y avoir accès lors de la compilation du fichier source du modèle. Par conséquent, il ne parvient pas à générer le code de fonction spécifique, ce qui entraîne une erreur de symbole externe non résolue.

Solutions

Pour résoudre ce problème, vous pouvez envisager les solutions suivantes solutions :

  1. Fonctions membres en ligne : Déclarez toutes les fonctions membres dans le modèle fichier d’en-tête en utilisant le mot-clé inline. Cela garantit que le compilateur a un accès immédiat au code de la fonction. Cependant, notez que cette approche est obsolète et peut ne pas fonctionner sur tous les compilateurs.
  2. Définition explicite dans le fichier d'en-tête : définissez l'implémentation complète de la fonction dans le fichier d'en-tête du modèle au lieu de créer une source distincte. déposer. Cela permet au compilateur d'accéder au code de la fonction pendant la compilation du programme et du modèle.
  3. Exporter les fonctions membres (obsolète) : définissez les fonctions membres dans le fichier source du modèle à l'aide du mot-clé export. Cela demande au compilateur de rendre les fonctions disponibles en dehors du fichier source. Cependant, cette fonctionnalité est obsolète depuis C 11 et ne doit pas être utilisée.

En tirant parti de l'une ou l'autre de ces solutions, vous pouvez vous assurer que le compilateur a accès à la définition complète de la fonction pendant le programme et le modèle. compilation, empêchant efficacement l'apparition de symboles externes non résolus.

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