iterator für eine template-liste erstellen



  • Hi, hoffentlich ist der Titel nicht falsch gewählt worden, in ein paar Google-Suchen habe ich schon Infos gefunden die mir weitergeholfen hätten, haben sie aber nicht, das Problem besteht immer noch. Es geht um folgendes :

    template<typename item_type>
    class Tabelle
    {
    private:
    	list<item_type> aListe;
    public:
    ....
    };
    

    Ich möchte einen Iterator für meine Liste erstellen, ich habe es bereits folgendermaßen ausprobiert :

    list<item_type>::iterator Iter;
    

    Allerdings hat das nicht funktioniert, ich habe in den Google-Suchergebnissen auch andere Methoden gefunden :

    typedef typename list<item_type>::iterator iter;
    

    Diese Methode hat leider auch nicht funktioniert. Versuche ich da etwas was rein programmiertechnisch nicht geht? ( was ich bezweifle ) oder wo mache ich meine Fehler, ich bedanke mich schonmal im voraus! ( Verwendete Entwicklungsumgebung, Visual Studio 2010 )



  • Versuchs mal mit list<item_type>::const_iterator



  • Doch, geht. Siehe std::sort. Was kommt bei letztere denn für eine Fehlermeldung?



  • Ich vermute mal, du willst deiner Klasse "Tabelle" einen Iterator verpassen, um damit auf das private Element "aListe" mit einem "Tabelle::begin()" usw. zuzugreifen.
    Ich würde da keinen normalen iterator anbieten, sondern einen const_iterator, da ohne dem const ein private für aListe unnötig ist, mach es public und du hast keine Probleme mehr.



  • also bisjetzt schauts so aus :

    #ifndef TABLE_H
    #define TABLE_H
    #include <iostream>
    #include <list>
    
    using namespace std;
    
    template<typename item_type>
    class Tabelle
    {
    public:
    	list<item_type> aListe;
    	list<item_type>::const_iterator aIter;
    	Tabelle(){};
    	~Tabelle(){};
    };
    
    #endif
    


  • phcn.fraggle schrieb:

    #ifndef TABLE_H
    #define TABLE_H
    
    #include <iostream>
    #include <list>
    
    using namespace std;
    
    template<typename item_type>
    class Tabelle
    {
    public:
    	list<item_type> aListe;
    	list<item_type>::const_iterator aIter;
    	Tabelle(){};
    	~Tabelle(){};
    };
    
    #endif
    

    Das using namespace std; hat in einer Header-Datei nichts zu suchen. Templateparameter fangen üblicherweise mit einem Großbuchstaben an (Das ist nur eine Konvention). Ich frage mich, was der Sinn von aIter ist. Die Semikolons hinter } bei Funktionen sind überflüssig. Deine benutzerdefinierten Default-Konstruktor und Destruktor an sich sind auch überflüssig.

    Jepp, hier fehlt ein typename ...


Anmelden zum Antworten