Templates
-
Hi,
ich habe eine Template-Klasse welche in einer .h-file definiert und in einem .cpp-file implementiert ist. Im .cpp-file sind alle möglichen Auführungen des Templates explizit Aufgeführt. Eine weitere normale Klasse erbt von dieser Template-Klasse. Anschließend wird diese normale Klasse in eine DLL gepackt und exportiert. Ich kann alles fehlerfrei kompilieren und linken.
Nur wenn ich die DLL in ein anderes Projekt einbinde und eine Funktion, welche ursprünglich aus der Template-Klasse ist, aus der normalen Klasse aufrufe bekomme ich einen Linkerfehler. (LNK2001)
Ich verwende den VC++.
Any ideas?
-
Müssen Templates nicht immer ganz in ein .h File?
http://www.c-plusplus.net/forum/viewtopic.php?t=39467
[EDIT]RechtSchreiBung[/EDIT]
MfG Max
-
@Master_Max
Müssen Templates nicht immer ganz in ein .h File?
Jein ...
Es gibt wege, die Definition und die deklaration zu trennen, ist aber nicht kompatibel zu allen compilern ...
Das aendert aber nix am Wesen eines Templates, nur eine "leere" schablone zu sein. Die reale wirkliche Klasse wird erst bei Spezifikation der template Parameter generiert.Und das wird auch die libary ned moegen ....
@bill
C++, templates in DLLs ???
Ich vermute du benutzt die mfc erweiterungs-dlls ? Die sind so aufgebaut, das man einfach klassen importieren und exportieren kann.
Die Meisten DLLs haben flache C-Schnittstellen (aus gutem Grund), da ist eh nix mit Klassen :pIch nehm auch an, das du die cpp datei des templates in deine Lib/dll includierst ? Was eigentlich gar keinen Effekt hat, weil soweiso kein lauffaehiger code erzeugt wird (wundert mich nur, das der compiler da ned meckert). Wenn du dann die template h. Datei in dein anderes projekt includierst, fehlt dem die Cpp datei, die in deiner lib steckt, da aber keinen binaeren code fur erzeugt hat.
Schreib alles in die .h datei, du brauchst ja eh keinen binaeren code von der klasse .... Das trennen macht dir an der stelle nur probleme ....Ciao ...
-
Danke für eure Antworten.
Aber gibt es denn keine Möglichkeiten die Implementierung zu trenne (der Übersicht halber).Die Schablonen werden nicht exportiert, nur die genauen Insatnzen der Schablonen als Basisklasse für eine exportierte Klasse.
-
/edit: war nicht relevant
-
jop.
und zwar am Anfang des template.cpp-files.Ich kann ja die DLL überstzen und linken. Nur wenn ich die DLL in einer anderen Anwendung nutze funktioniert es nicht --> LNK
-
Ahh ok, langsam versteh ich ...
vom logischen her muesst es gehen, beim compilieren packt der compiler den binaercode den das template erzeugt, mit in seinen eigenen code ...
Kann sein, dass er wegen der template aufloesung mit den symbolen durechinander kommt ... Hasts schon mal mit der nur .h methode versucht ? oder zu viel aufwand ?
Vielleicht ists ne alternative, ned zu vererben sondern zu aggregieren ? (member) ...Vererbst du oeffentlich von dem template ?
Ciao ...
-
ja, public class __declspec(export) drv : public template<T>
Alle in .h hab ich nicht versucht ist auch ziemlich Arbeit.
-
*push* , Sorry aber hat niemand eine Idee?