Die Vorlagenfunktion kann nicht exportiert werden

8

Ich habe eine Klasse namens "SimObject":

%Vor%

Ich habe eine andere Klasse namens "ITerrainDrawable":

%Vor%

Diese Klassen befinden sich in verschiedenen Bibliotheken. SimObject ist in simBase, ITerrainDrawable ist in simTerrain-Bibliotheken. Selbst wenn ITerrainDrawable von SimObject abgeleitet ist und ich die Bibliothek von simBase eingebunden habe, bekomme ich einen Linkfehler:

  

ungelöstes externes Symbol

%Vor%

Warum bekomme ich diesen Fehler?

Alles funktioniert gut, wenn ich die Template-Funktion nicht verwende, aber ich brauche sie.

Wenn ich diese Funktion in die simTerrain-Bibliothek verschiebe, funktioniert das gut, aber ich möchte keine doppelte Funktion verwenden, weil es viele Bibliotheken wie simTerrain gibt.

    
ufukgun 28.12.2009, 12:54
quelle

5 Antworten

10

C ++ unterstützt die separate Kompilierung von Vorlagencode nicht wirklich - Sie müssen die Definition der Vorlage in eine Header-Datei einfügen.

    
anon 28.12.2009, 12:57
quelle
6

Es gibt zwei Kompilierungsmodelle für Vorlagen:

  1. Inclusion-Kompilierungsmodell (einschließlich Header-Datei)
  2. Separates Kompilierungsmodell (Trennung der Schnittstelle von der Implementierung)

Sie können export keyword zum Zeitpunkt der Schablonendefinition für die zweite Option verwenden.

%Vor%

Aber ich bin nicht sicher, dass alle Compiler es unterstützen.

    
Ashish 28.12.2009 13:46
quelle
5

Die vollständige Implementierung einer Vorlagenklasse muss in der Kopfzeile der Vorlagenklasse enthalten sein. Die ANSI / ISO-Standards für C ++ ermöglichen eine Möglichkeit, die Implementierung mit dem Schlüsselwort export in eine separate Kompilierungseinheit zu stellen. Derzeit gibt es jedoch Compiler, die dies tatsächlich unterstützen.

Weitere Informationen finden Sie hier und das.

    
Prasoon Saurav 28.12.2009 13:23
quelle
4

Hier ist das Arbeitsbeispiel:

%Vor%

Dump der Datei test.dll

Dateityp: DLL

Abschnitt enthält die folgenden Exporte für test.dll

%Vor%     
cepstr 18.06.2012 09:43
quelle
1

Sie müssen die Template-Spezialisierung (cpp file is fine) angeben. Das bedeutet, dass Sie alle Kombinationen von Vorlagenargumenten exportieren müssen, die Sie verwenden werden:

%Vor%

Ich benutze dies in Visual Studio 2013 und es funktioniert.

    
qub1n 23.03.2015 06:52
quelle

Tags und Links