Maison > développement back-end > C++ > Pourquoi mon code C génère-t-il une erreur « Référence non définie au constructeur de classe de modèle » ?

Pourquoi mon code C génère-t-il une erreur « Référence non définie au constructeur de classe de modèle » ?

Barbara Streisand
Libérer: 2025-01-02 22:36:40
original
303 Les gens l'ont consulté

Why Does My C   Code Produce an

Référence non définie au constructeur de classe de modèle

Dans ce code C, le compilateur génère l'erreur "référence non définie à cola(float) : cola()". Cette erreur se produit car le compilateur ne trouve pas l'implémentation du constructeur pour la classe de modèle cola.

Réponse 1 : Instanciation explicite du modèle

Une solution consiste à instancier explicitement le classe de modèle cola à la fin de cola.cpp, le forçant à compiler le béton instanciations.

template class cola<float>;
template class cola<string>;
Copier après la connexion

Réponse 2 : inclusion du fichier d'en-tête

Alternativement, l'implémentation de la classe de modèle peut être déplacée vers le fichier d'en-tête cola.h. Cela garantit que l'implémentation est disponible pour toutes les unités de traduction qui incluent le fichier d'en-tête.

Raison de l'inclusion du fichier d'en-tête

Placer l'implémentation dans le fichier d'en-tête évite d'avoir à pour une instanciation explicite. Il garantit que la classe de modèle et ses fonctions membres sont disponibles pour chaque unité de traduction incluant le fichier d'en-tête. Cette approche est couramment utilisée pour les classes de modèles qui sont largement utilisées dans la base de code.

Remarques supplémentaires :

  • Assurez-vous qu'une seule implémentation de la classe de modèle existe dans toute la base de code.
  • L'implémentation de la classe modèle doit être après toutes les définitions de classe.
  • Si la classe modèle est déclarée dans plusieurs fichiers d'en-tête, l'implémentation doit être placée dans un fichier d'en-tête distinct qui est inclus dans tous les autres fichiers d'en-tête où la classe de modèle est utilisé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!

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