Maison > développement back-end > C++ > Pourquoi les modèles C provoquent-ils des erreurs de liaison « Symbole externe non résolu » ?

Pourquoi les modèles C provoquent-ils des erreurs de liaison « Symbole externe non résolu » ?

Mary-Kate Olsen
Libérer: 2025-01-05 13:04:41
original
849 Les gens l'ont consulté

Why Do C   Templates Cause

Pourquoi les modèles provoquent-ils des erreurs de type « symbole externe non résolu » ?

Lors du développement de code C avec des modèles, il est courant de rencontrer des erreurs de « symbole externe non résolu » lors de la liaison. Ce problème se pose car les classes et les fonctions basées sur un modèle ne sont pas instanciées tant qu'elles ne sont pas utilisées, généralement dans un fichier source distinct (.cpp).

Lorsqu'un modèle est utilisé, le compilateur demande le code complet pour que cette fonction soit construite. la fonction correcte avec le type approprié. Cependant, le code de la fonction est contenu dans le fichier source du modèle et donc indisponible.

Par conséquent, le compilateur suppose que la fonction est spécifiée ailleurs et n'inclut que son appel. Lorsque le fichier source du modèle est compilé, le type de modèle spécifique de la source du programme n'est pas utilisé et ne parvient donc pas à générer le code de fonction essentiel. Cela entraîne une erreur de symbole externe non résolue.

Comment résoudre le problème :

  1. Inclure la définition de la fonction membre dans l'en-tête du modèle : Définir la fonction membre dans le fichier d'en-tête du modèle au lieu de créer un fichier source distinct. Cela permet au compilateur d'accéder au code complet de la fonction lors de la compilation de la fonction saisie dans la source du programme.
  2. Incorporer toutes les fonctions membres dans la source du modèle : Ce n'est plus le cas. recommandé pour les versions modernes de Visual Studio (2017).
  3. Utilisez le mot clé « export » dans la source du modèle : Définissez les fonctions membres dans la source du modèle à l'aide du mot-clé "export". Cependant, cette approche n'est pas largement prise en charge par les compilateurs et est obsolète en C 11.

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