Problem mit meinem Template
-
Hallo!
Da ich noch kein C++ Profi bin komme ich mit meinem Template nicht weiter
Hier mal der code :
#include<iostream> using namespace std; template <typename T, int Groesse> class Array { private: T objekte[Groesse]; public: Array(); T &getObjekt(int Index); void setObjekt(const T &Objekt, int Index); }; int main(int argc , char ** argv){ Array<int,10> meinArray; return 0; };wenn ich versuche das zu compilieren, meckert der compiler bei der Zeile
Array<int,10> meinArray;Er sagt: undefined reference to `Array<int, 10>::Array()'
Kann mir einer sagen was ich falsch mache!!
Vielen Dank schon mal im Voraus!
Matze
-
Wo ist die Implementation?
Simon
-
Aaaaaaaaaaaaaahhhhhhhhhhhhh!
Vielen Dank Simon!
Da muss man erst mal drauf kommen!Jetzt scheint es zu funktionieren?
Matze
-
#include<iostream> using namespace std; template <typename T, int Groesse> class Array { private: T objekte[Groesse]; // T objekte* und dann im Konstruktor initialisieren public: Array(); // // Groesse würde ich hier dem Konstruktor übergeben (der initialisiert dann objekte mit Groesse. Ein Destruktor fehlt auch... T &getObjekt(int Index); //was macht das & vor dem Methodennamen bzw was macht die Methode überhaupt? Soll das so eine Art Push() sein o.O? void setObjekt(const T &Objekt, int Index); }; int main(int argc , char ** argv){ Array<int,10> meinArray; return 0; };Gruß
Markus
-
T objekte[Groesse]; // T objekte* und dann im Konstruktor initialisieren
Davon ab dass das syntaktisch falsch ist, ändert es völlig die Semantik des Containers. Hier ist wohl ein Container mit statischen Dimensionen gefragt. Ein Destruktor wird übrigens auch nur dann benötigt, wenn er dies ändert.
T &getObjekt(int Index); //was macht das & vor dem Methodennamen bzw was macht die Methode überhaupt? Soll das so eine Art Push() sein o.O?
Push? Get? Hä? Vielleicht gibt diese Funktion eine Referenz auf ein Objekt zurück? :p
-
Davon ab dass das syntaktisch falsch ist, ändert es völlig die Semantik des Containers. Hier ist wohl ein Container mit statischen Dimensionen gefragt. Ein Destruktor wird übrigens auch nur dann benötigt, wenn er dies ändert.
Ein Destruktor wird also nicht immer benötigt? Was passiert dann mit dem Speicher, wenn das Objekt am Ende seines Lebens ist? Bin auch noch am lernen deshalb frag ich

Push? Get? Hä? Vielleicht gibt diese Funktion eine Referenz auf ein Objekt zurück? :p
Joa, jetzt hab ichs auch gecheckt....

-
Gamester schrieb:
Davon ab dass das syntaktisch falsch ist, ändert es völlig die Semantik des Containers. Hier ist wohl ein Container mit statischen Dimensionen gefragt. Ein Destruktor wird übrigens auch nur dann benötigt, wenn er dies ändert.
Ein Destruktor wird also nicht immer benötigt? Was passiert dann mit dem Speicher, wenn das Objekt am Ende seines Lebens ist? Bin auch noch am lernen deshalb frag ich

Eine Klasse hat immer einen Destruktor. Die Aussage war dahingehend zu verstehen, dass der Destruktor in diesem Fall nicht selbst deklariert und implementiert werden muss, weil der durch den Compiler implizit generierte Destruktor das Richtige tut - nämlich nichts außer dem Aufruf der Destruktoren aller Member und Basisklassen.
-
Du kannst dir merken, dass du bei Klassen, die selber nur Objekte enthalten, eigentlich auf die Implementierung eines spezifischen Destruktors verzichten kannst. Du brauchst einen eigenen Destruktor, wenn du Zeiger hast, die dynamisch Speicher verwalten, oder wenn du spezielle Ressourcen anforderst (z.B. Dateien).