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
Susan SarandonOriginal
2024-12-12 19:58:10746Durchsuche

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>;

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

template class nodo_colaypila<float>;
template class nodo_colaypila<std::string>;

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;

sollte sein:

nodo_colaypila<T>* ult, *pri;
  • 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!

Stellungnahme:
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