Maison > développement back-end > C++ > Pourquoi est-ce que j'obtiens des erreurs « Référence non définie à » pour les constructeurs de classes de modèles et comment puis-je les corriger ?

Pourquoi est-ce que j'obtiens des erreurs « Référence non définie à » pour les constructeurs de classes de modèles et comment puis-je les corriger ?

Susan Sarandon
Libérer: 2024-12-12 19:58:10
original
732 Les gens l'ont consulté

Why Do I Get

"Référence non définie au" constructeur de classe de modèle [Dupliquer]

L'erreur du compilateur "référence non définie à..." pour les constructeurs de classe de modèle signifie un manque d'instanciation explicite instructions pour les classes de modèles spécifiques utilisées dans le programme. Ce problème se produit car le compilateur ne compile pas automatiquement le code du modèle jusqu'à ce qu'il soit explicitement requis.

Solution 1 : Instanciation explicite du modèle

Ajouter les instructions d'instanciation explicites du modèle à la fin du fichier d'implémentation (cola .cpp dans ce cas) :

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

De plus, incluez les lignes suivantes dans nodo_colaypila.cpp :

template class nodo_colaypila<float>;
template class nodo_colaypila<std::string>;
Copier après la connexion

Cela force le compilateur à compiler les classes de modèles requises.

Solution 2 : Inclure l'implémentation dans le fichier d'en-tête

Déplacer le code d'implémentation de cola .cpp et nodo_colaypila.cpp dans cola.h et nodo_colaypila.h, respectivement. Cela garantit la disponibilité des définitions de fonctions dans toutes les unités de traduction utilisant les classes de modèles.

Avantages et inconvénients de chaque solution :

  • Solution 1 :

    • Pro : Plus efficace car il compile uniquement les instances de modèle nécessaires.
    • Inconvénient : Nécessite instanciation manuelle pour chaque classe de modèle souhaitée.
  • Solution 2 :

    • Pro : Plus pratique et flexible, car elle permet de futures instanciations de classes de modèles.
    • Inconvénient : compilation potentiellement plus lente en raison de la génération de code en double pour chaque traduction unité.

Autres fautes de frappe dans le code :

  • Syntaxe du pointeur incompatible dans la déclaration cola.h :
nodo_colaypila<T><T>* ult, pri;
Copier après la connexion

devrait être :

nodo_colaypila<T>* ult, *pri;
Copier après la connexion
  • Manquant #endif à la fin de nodo_colaypila.h.
  • Le paramètre par défaut du constructeur nodo_colaypila doit être défini dans le fichier d'en-tête, pas dans le fichier d'implémentation.

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