Klassen anderer Dateien benutzen
-
Hallo,
Ich habe mir meine eigene Template-Klasse geschrieben (template <typename T> class CMIListe {...} aufgeteilt auf MIListe.h und MIListe.cpp). Wenn ich versuche ein Objekt von dieser in CMIListenTestDlg.cpp zu erzeugen, bekomme ich immer LNK2019 - nicht aufgelöstes Externes Symbol blablabla für den Kon- und Destruktor meiner Klasse, obwohl ich #include "MIliste.h" in CMIListenTestDlg.cpp gesetzt habe.
Wie kann ich die Klasse korrekt aufrufen?
Am Template selbst liegt es nicht, weil ich eine Instanz davon innerhalb MIListe.cpp erzeuge, keine Fehlermeldung bekomme.
Vielen Dank für die kompetente Hile!
-
Template-Klassen müssen sich bei den gängigen Compilern komplett im Header befinden. Eine Aufteilung in cpp und h ist also (noch) nicht möglich.
-
Mist, doppelt gepostet. Hatte ne Fehlermeldung im Forum aber der Post wurde trotzdem abgeschickt. *sry*
-
Vorschlag wäre:
Die cpp umbenennen in templ und am ende des Headers schreiben:
#include MyName.templ
Somit sind die sachen auch im Header, können aber später mal leichter auseinander gezogen werden.
-
Anführungeszeichen nicht vergessen.
-
Was heisst "noch nicht"?
Was gibt's denn da für Ansätze, die templates irgendwann aufspalten zu können?
(seh' bis jetzt keinen effizienten)Wenn die entsprechenden Klassen erst bei der Verwendung erstellt werden, muss der Compiler den Code jedenfalls kennen. -> Es kann nicht nur nen header inkludiert werden.
Daran wird sich in Zukunft nicht viel ändern, oder?
-
Nur wenn man im Header dazu veranlassen könnte, bestimmte cpp-Dateien durchzukauen... Wie das exlpiziet ja mit #include "MyName.templ" gemacht wird...
mfG D1B
-
im standard gibt es ein keyword export oder so. wie man sich das vorstellt weiss ich (und anscheinend auch alle compilerbauer) nicht. vielleicht die templates in eine art intermediate language uebersetzen (in .net kann man auch dlls haben, die nur ein interface enthalten), oder einfach die .cpp heimlich includieren, ohne dass der user es angeben muss.