Speicher für unbekannte Template-Klasse (2)
-
Guten Morgen,
ich poste mal das Wesentliche ...//DynamicArray.h //Klassen-Dummy template <class type> class DynamicArray; //Einen Datentyp für die Klasse erstellen -> siehe Link im voherigen Thread template <class type> struct LP_DYNAMIC_ARRAY { typedef DynamicArray<class type>* Array; }; template <class type> class EXPORT DynamicArray { //Funktionen }; //Main.h //Ein Array-Interface erstellen template <typename type> int CreateDynamicArrayInterface(LP_DYNAMIC_ARRAY<type> *ppDynamicArray) { //Speicher für die Array-Klasse bereitstellen *ppDynamicArray = new DynamicArray; if(!(ppDynamicArray)) { //Nicht genügend Speicher vorhanden return OUT_OF_MEMORY; } (*ppDynamicArray)->m_pEngineMain = this; return OK; } //Aufruf in der Main.cpp LP_DYNAMIC_ARRAY<int> array; this->CreateDynamicArrayInterface(&array); array.Array-> //Fehler !!!
Wenn ich jetzt in der Main.h Speicher allokalisieren möchte, bekomm ich nen Fehler, egal, wo ich das '<type>' hinschreibe
Und als Zweites kann man die Funktionen der initialisierten Klasse nicht Aufrufen - auch nicht über den (dummen) Weg über die StrukturM.T.
[ Dieser Beitrag wurde am 06.04.2003 um 09:59 Uhr von Manuel editiert. ]
-
Der Fehler kommt weil Array ein typedef ist und kein Objekt
-
Lösungsvorschlag?
BTW: Genau so stand s aber in dem Artickel
M.T.
-
Warum eigentlich LP_DYNAMIC_ARRAY? Arbeite lieber sofort mit DynamicArray anstatt das noch in ne struct zu packen. Dann dürfte das laufen. Du setzt LP_DYNAMIC_ARRAY mit DynamicArray gleich...
-
LP_DYNAMIC_ARRAY ist ein DynamicArray*
Ich benutze das, weil es 1. als Datentyp cooler klingt , 2. weil ich den '.' für Klassen nicht mag und lieber '->' verwende, 3. weil ich s.o. ein System verwende indem man der Oberklasse einen Doppelpointer auf die Unterklasse übergibt und somit Speicher dafür bereitgestellt wird und als 4. und letzten Grund, damit die Klasse eine Release-Funktion zum besseren Arbeiten haben kann muss es ein DynamicArray* sein.
Es muss doch eine Möglichkeit geben für Templates ein typedef zu benutzen
M.T.
[ Dieser Beitrag wurde am 06.04.2003 um 13:49 Uhr von Manuel editiert. ]
-
Klar kannst du für Templates ein Typedef benutzen:
typedef vector<Test> Testvector;
So wie ich das sehe ist LP_DYNAMICARRAY eine Struct mit einem typedef drin. Hast du jedenfalls so gepostet:
template <class type> struct LP_DYNAMIC_ARRAY { typedef DynamicArray<class type>* Array; };
Ich verstehe den Sinn dahinter nicht...
-
Das mit dem typedef und einem fest definiertem Datentyp ist mir schon klar, ich möchte den erstellten Datentyp abe wie folgt verwenden:
LP_DYNAMIC_ARRAY<int> array; this->CreateDynamicArrayInterface(&array)
... und das mit der Struktur - den Sinn dahinter versteh ich selbst nicht ganz , aber folgender Artickel sagt, dass es so funktionieren müsste: http://www.gotw.ca/gotw/079.htm .
M.T.
-
so sollte es funktionieren:
LP_DYNAMIC_ARRAY<int>::Array array;
-
du kannst keine template typedefs machen, aber typedefs auf templates sind in Klassen /also auch in Strukturen\ erlaubt, also packst du das einfach in die Klasse /o. Struktur\ rein.
-
Ich hab s geschafft - danke allen, die mir geholfen haben ...
M.T.