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.... 🙄


  • Mod

    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).


Anmelden zum Antworten