Frage zu Klassentemplates



  • Hallo,

    ich habe eine Frage zu der korrekten Verwedung von Klassentemplates.
    Dieses Klassentemplate ist definiert:

    #include <Classes.hpp>
    
    template <class T> class Liste  // Vorausdeklaration
    {
       public:
          ~Liste() { delete liste; };
          Liste() { liste = new TList(); };
          void elementHinzufuegen(T* element) { liste->Add(element); };
          void elementLoeschen(T* element) { liste->Delete(element); };
          void elementLoeschen(int pos) { liste->Remove(pos); };
          T* elementHolen(int pos);
    
       private:
          TList* liste;
    };
    

    Die Methode elementHolen will ich in der cpp-Datei ausformulieren.

    Mein Versuch dazu:

    template<class T> T* Liste<class T>::elementHolen(int pos)
    {
       for (int i=0; i<liste->Count; i++)
       {
          // ...
       }
       return NULL;
    }
    

    ...scheitert mit der Fehlermeldung

    Liste<T>::elementHolen(int) ist kein Element von Liste<T>.
    

    Kann mir das bitte jemand erklären?
    Meine Recherchen im Internet bringen mich nicht weiter, da ich denke, Tutorials gefunden zu haben, die genau jenes tun.... Oder aber ich stehe gerade ziemlich fies auf dem Schlauch.

    Ich danke.

    Oliver.



  • Mir war nicht bewusst, dass man die Definition von Methoden bei Templates nicht in der cpp-Datei machen darf.

    Das ganze in den Header (sieht irgendwie ungewöhnlich aus) verschoben und es funktioniert.

    Für die, die diese Probleme auch hatten/haben/irgendwann mal haben werden, hier der funktionierende Code:

    Header:

    template <class T> class Liste  // Vorausdeklaration
    {
       public:
          ~Liste() { delete liste;};
          Liste() { liste = new TList(); };
          void elementHinzufuegen(T* element) { liste->Add(element); };
          void elementLoeschen(T* element) { liste->Delete(element); };
          void elementLoeschen(int pos) { liste->Remove(pos); };
          T* elementHolen(int pos);
    
       private:
          TList* liste;
    };
    
    template<class T> T* Liste<T>::elementHolen(int pos)
    {
       // Code
    }
    


  • Nur als Ergänzung noch der Link zu einen passenden Beitrag aus der C++ FAQ


Anmelden zum Antworten