Heim > Backend-Entwicklung > C++ > Warum erhalte ich die Fehlermeldung „Undefinierter Verweis auf' für Vorlagenklassenkonstruktoren und wie kann ich diese beheben?

Warum erhalte ich die Fehlermeldung „Undefinierter Verweis auf' für Vorlagenklassenkonstruktoren und wie kann ich diese beheben?

Susan Sarandon
Freigeben: 2024-12-12 19:58:10
Original
730 Leute haben es durchsucht

Why Do I Get

„Undefinierter Verweis auf“ Template-Klassenkonstruktor [Duplikat]

Der Compilerfehler „Undefinierter Verweis auf...“ für Template-Klassenkonstruktoren weist auf einen Mangel an expliziter Instanziierung hin Anweisungen für die spezifischen Vorlagenklassen, die im Programm verwendet werden. Dieses Problem tritt auf, weil der Compiler Vorlagencode erst dann automatisch kompiliert, wenn er explizit benötigt wird.

Lösung 1: Explizite Vorlageninstanziierung

Anhängen expliziter Vorlageninstanziierungsanweisungen an das Ende der Implementierungsdatei (cola .cpp in diesem Fall):

template class cola<float>;
template class cola<string>;
Nach dem Login kopieren

Fügen Sie zusätzlich die folgenden Zeilen hinzu nodo_colaypila.cpp:

template class nodo_colaypila<float>;
template class nodo_colaypila<std::string>;
Nach dem Login kopieren

Dies zwingt den Compiler, die erforderlichen Vorlagenklassen zu kompilieren.

Lösung 2: Implementierung in Header-Datei einschließen

Verschieben Sie den Implementierungscode aus Cola .cpp und nodo_colaypila.cpp in cola.h bzw. nodo_colaypila.h. Dies gewährleistet die Verfügbarkeit von Funktionsdefinitionen in allen Übersetzungseinheiten, die die Vorlagenklassen verwenden.

Vor- und Nachteile jeder Lösung:

  • Lösung 1:

    • Pro: Effizienter, da nur die notwendigen Vorlageninstanzen kompiliert werden.
    • Nachteil: Erfordert manuelle Instanziierung für jede gewünschte Vorlagenklasse.
  • Lösung 2:

    • Pro: Bequemer und flexibler, da Es ermöglicht zukünftige Instanziierungen von Vorlagenklassen.
    • Nachteil: Möglicherweise langsamere Kompilierung aufgrund der doppelten Codegenerierung für jede Übersetzung Einheit.

Andere Tippfehler im Code:

  • Nicht übereinstimmende Zeigersyntax in der cola.h-Deklaration:
nodo_colaypila<T><T>* ult, pri;
Nach dem Login kopieren

sollte sein:

nodo_colaypila<T>* ult, *pri;
Nach dem Login kopieren
  • Fehlend #endif am Ende von nodo_colaypila.h.
  • Der Standardparameter für den nodo_colaypila-Konstruktor sollte in der Header-Datei definiert werden, nicht in der Implementierungsdatei.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich die Fehlermeldung „Undefinierter Verweis auf' für Vorlagenklassenkonstruktoren und wie kann ich diese beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage