Fehler beim erstellen einer Nicht-Template Klasse in einer Template Funktion

MountFX

Grünschnabel
[EDIT]

Es liegt nicht an den Templates. Auch wenn ich direkt in main() eine Instanz der Klasse Blubb (ohne Templates) erzeuge, kommt der LNK2019 Fehler.

Hmm, sehr komisch ...

-------------------------------------------------------------------------------------------------------------

Hallo Leute :),
bin neu hier da ich langsam an einem Fehler verzweifle und hoffe dass Ihr mir dabei helfen könnt :)!

Und zwar rufe ich aus einer Main-Klasse (ist in einer eigenen .dll), eine Template Funktion: TempBlubb auf. Diese liegt in einer zweiten .dll - wurde auch mit __declspec(dllexport) exportiert. Funktioniert auch wunderbar soweit.

Nun habe ich aber das Problem, dass wenn ich von der Funktion TempBlubb, ein Objekt irgendeiner eigenen ganz simplen Klasse Blubb erzeuge (liegt in der selben .dll und selben Directory - besteht nur aus einem CTor und DTor und wurde auch nicht exportiert), Fehler kommen für jede aufgerufende Methode dieser Klasse (also zurzeit CTor und DTor). Habs abgekürzt (jeweils mit ...):

Code:
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol

""public: __thiscall ITC::Blubb::Blubb(void)" ..."

in Funktion

""void __cdecl ITC::TempBlubb(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int &, ...)" (...)".TempBlubb.obj

Hab den Fehler schon eingeschränkt: Wenn ich den CTor und DTor der Klasse Blubb direkt im Header implementiere funktioniert es! Ich will und mach das aber nicht, da die Header Datei einfach zu groß werden würde.

Also: Main ruft Template Funktion -> Template BlubbTmp Funktion erstellt Klasse Blubb --> Blubb Klasse LNK2019 Fehler bei jeder aufgerufenen Methode.

Hab auch die Templates ganz normal im Header (und nicht in die cpp ausgelagert) - also da ist der Fehler nicht (wie Google 1000e Lösungen brachte).

Kann mir jemand eine Lösung dafür sagen, oder ist die einzige Möglichkeit es zu lösen, den gesamten Code der Klasse Blubb in der Header Datei zu implementieren? Ich dachte immer mit den Deklarationen in der Header sollte alles passen. Wundere mich deshalb, warum er schon die komplette implementierung einer ganz normalen Klasse verlangt!
 
Zuletzt bearbeitet:
Hallo,

ich blicke bei deiner Beschreibung nicht so ganz durch, erst recht durch die nachträgliche Editierung. Durch diese weiß ich jetzt überhaupt nicht mehr, welcher Teil vom weiter unten stehenden Text noch relevant ist. Ein nachvollziehbares Minimalbeispiel mit vollständigem Quellcode wäre hilfreich.

Zu Templates an sich: die Definition eines Funktionstemplates muss an der Stelle bekannt sein, an welcher es aufgerufen wird. Erst dann kann nämlich die Funktion instanziiert werden, da die konkreten Template-Parameter vorher nicht bekannt sind. Die einzige mir bekannte Ausnahme sind explizite Instanziierungen. Allerdings weiß ich nicht, ob sich solche auch von einer DLL exportieren lassen.

Grüße,
Matthias
 

Neue Beiträge

Zurück