Du bist nicht angemeldet.

Werbeanzeige

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 917

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

1

04.06.2007, 14:55

Linkerfehler bei Klassentemplates

Hi,

ich habe ein Klassentemplate geschrieben udn in eine Dll gepackt. So wenn ich jetzt eine andere Klasse davon ableite, geht das problemlos. Wenn ich alerdings ein objekt/Zeiger davon erstellen will also so:

C-/C++-Quelltext

1
IManagerBaseT<bluB> *pBlub;

dann kommen ein haufen linkerfehler(Nicht aufgelöstes Symbol). Kann den quellcode leider net posten, weil es sehr sehr viel ist. Wenn ich mir allerdings sagen könnte, welche Teile ich posten soll kann ich das machen.

Ich hoffe ihr könnt mir helfen.

mfg,

Faule Socke

David Scherfgen

Administrator

Beiträge: 10 334

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

04.06.2007, 14:58

Re: Linkerfehler bei Klassentemplates

Zitat von »"Faule Socke"«

ich habe ein Klassentemplate geschrieben udn in eine Dll gepackt.

Das geht gar nicht. Templates können nicht in DLLs oder statische Libraries gepackt werden, da sie erst zur Kompilierzeit vom Compiler instanziert werden. Der Compiler muss daher den Quelltext des Templates vorliegen haben.
Du kannst Instanzen von Templates exportieren, aber nicht Templates selbst.

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 917

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

3

07.06.2007, 20:55

Ich habe allerdings schon eine Stringklasse geschrieben(in der selben dll) und auch als template und diese funktioniert.(Intern sowie extern)


Socke

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

07.06.2007, 21:02

Zitat von »"Faule Socke"«

Ich habe allerdings schon eine Stringklasse geschrieben(in der selben dll) und auch als template und diese funktioniert.(Intern sowie extern)


Socke


Wenn du den Quellcode mit deiner Library mitlieferst ist das auch kein Problem. Du kannst nur keine Templates IN die DLL exportieren.
@D13_Dreinig

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 917

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

5

07.06.2007, 21:48

Zitat von »"David_pb"«

Wenn du den Quellcode mit deiner Library mitlieferst ist das auch kein Problem. Du kannst nur keine Templates IN die DLL exportieren.


Das versteh ich net. ich liefere den gesamten quellcode mit. aber die stringklasse ist ja auf zwei dateien aufgeteilt(src und header) und wenn ich nun ein projekt schreibe das die dll verwendet, kennt der kompiler ja nur die header. warum funktioniert es bei der stingklasse und warum gibt es bei der anderen linkerfehler? die einzigen unterschiede sind, dass die stringklasse von nichts abgeleitet ist, die andere aber von meiner selbst geschriebenen IUnknown.

mfg,

Faule Socke

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

07.06.2007, 22:06

Ist diese Stringklasse ein Klassentemplate? Dann hast du mit sicherheit nicht auf mehrere Dateien aufgeteilt.
@D13_Dreinig

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 917

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

7

08.06.2007, 14:03

sie ist ein klassentemplate. und sie ist auf mehrere dateien aufgeteilt. schau einfach mal auf meiner hp nach FastStream(bei den downloads)... runterladen... die dateien heissen fsString.h und fsString.cpp


Im ordner TestFS ist ein projekt, was die stringklasse (erfolgreich) testet!

EDIT
Du solltest version 1.0.0.4 runterladen...


mfg,

Faule Socke

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

08.06.2007, 15:13

Das sollte so nichtmal compilieren! Ich garantier dir das du da was falsch machst.
@D13_Dreinig

Faule Socke

Community-Fossil

  • »Faule Socke« ist der Autor dieses Themas

Beiträge: 1 917

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

9

08.06.2007, 15:44

Es lässt sich aber kompillieren...


Probiers halt aus... im ordner Doc ist ne datei wie man sie richtig einrichtet...


mfg,

Faule Socke

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

08.06.2007, 16:10

Ich weiß das es nicht geht! Probiers doch selbst aus! ;-) Templatecode muss von einer Compiliereinheit sichtbar sein. Das ist gewährleistet wenn der Code in einer Datei steht oder exportiert wird (Templateexport, was aber kaum ein Compiler unterstützt).
Ich vermute also schwer das irgendwo ein Fehler passiert den du nicht siehst oder sonstwas...
@D13_Dreinig

Werbeanzeige