Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

11

26.11.2003, 12:08

Antwort an den letzten Beitrag

Ich mache die Klasse deshalb nicht zur Template-Klasse, weil eine Template-Klasse nur mit einem Datentyp arbeiten kann, die Klasse soll aber mit verschiedenen beliebigen Datentypen gleichzeitig arbeiten können! :rolleyes: :rolleyes:

Nochmal das Problem: Die Klasse soll exportiert werden, die Template-Funktion aber nicht. Der Kompiler exportiert die Template-Funktion automatisch. Wird die Template Funktion jetzt in einem Programm aufgerufen, gibt es Probleme.

Samuel_G

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

12

26.11.2003, 17:16

Warum sollte sie nur mit einem datentyp arbeiten können?

Quellcode

1
2
3
4
template <class a, class b> class Test
{
....
}


Die STL verwendet auch mehrere datentypen in den klassen.

Anonymous

unregistriert

13

30.11.2003, 17:37

Alles Klar

Danke für euer Bemühen. Ich weiß jetzt wie 's zu lösen ist! :) :) :) :)

Jumping Jack

Treue Seele

Beiträge: 142

Wohnort: Hamburg

Beruf: Schüler

  • Private Nachricht senden

14

30.11.2003, 21:50

Und wie machst du das?

Anonymous

unregistriert

15

01.12.2003, 15:25

Wie ich das löste

Also

klar ist:

1. Die Template-Funktion darf nicht veröffentlicht werden, die anderen Funktionen müssen es aber.

2. Setzt man __declspec(dllexport) hinter das class-Schlüsselwort, so wendet der Kompiler __declspec(dllexport) auf ALLE Member-Funktionen an (auch auf Template-Member-Funktionen). So geht's also nicht.

Lösung: man setzt "manuell" __declspec(dllexport) vor alle zu veröffentlichenden Members, nicht aber vor das Template-Member (!) (SG_API ist beim Kompilieren gleich __declspec(dllexport) anderenfalls __declspec(dllimport)) :

class Class
{
public:
//einige zu veröffentlichende Funktionen:
SG_API CClass(void);
SG_API ~CClass(void);
SG_API void Func1(void);

//ein Template:
template <typename TTyp> void TemplateFunc(TTyp* p);
};

Anonymous

unregistriert

16

01.12.2003, 15:25

Wie ich das löste

Also

klar ist:

1. Die Template-Funktion darf nicht veröffentlicht werden, die anderen Funktionen müssen es aber.

2. Setzt man __declspec(dllexport) hinter das class-Schlüsselwort, so wendet der Kompiler __declspec(dllexport) auf ALLE Member-Funktionen an (auch auf Template-Member-Funktionen). So geht's also nicht.

Lösung: man setzt "manuell" __declspec(dllexport) vor alle zu veröffentlichenden Members, nicht aber vor das Template-Member (!) (SG_API ist beim Kompilieren gleich __declspec(dllexport) anderenfalls __declspec(dllimport)) :

class Class
{
public:
//einige zu veröffentlichende Funktionen:
SG_API CClass(void);
SG_API ~CClass(void);
SG_API void Func1(void);

//ein Template:
template <typename TTyp> void TemplateFunc(TTyp* p);
};

Werbeanzeige