Index-Operator überladen



  • Guten Abend,
    ich bin zur Zeit dabei eine Verketteteliste zu schreiben und versuche gerade den Index-Operator zu überladen.
    Ein Stück von meiner Klasse :

    template<typename T>
    class CListenKnoten
    {
        struct SListenKnoten //Knoten
        {
            T data; //Inhalt
            SListenKnoten *next; //zeigt auf das nächste Element
        };  SListenKnoten *anker; //Anfang der Kette
    
        public:
            SListenKnoten operator[](int);
    };
    

    Funktion

    template<typename T>
    SListenKnoten CListenKnoten::operator[](int index)
    {
        SListenKnoten *wandern = anker;
        for(int i = 0; i < index; i++)
        {
            if(i == index)
            {
                return *wandern;
            }
            wandern = wandern->next;
        }
    }
    

    Wo ist der Fehler bei der Funktion ? Ich übergebe dem Indexoperator ein Integer mit dem Index. Der Operator ist von der Klasse "CListenKnoten" und soll ein Wert vom Typ "SListenKnoten" zurückgeben. Doch beim Versuch es zu kompillieren kommt folgendes :

    error: expected constructor, destructor, or type conversion before "CListenKnoten"

    Mit freundlichen Grüßen : FreakY



  • Versuchs doch mal so

    template<typename T>
    SListenKnoten CListenKnoten<T>::operator[](int index)
    


  • Hatte ich auch schon versucht, geht leider genauso wenig.



  • template<typename T>
    CListenKnoten::SListenKnoten CListenKnoten<T>::operator[](int index)
    
    // Oder
    
    template<typename T>
    CListenKnoten<T>::SListenKnoten CListenKnoten<T>::operator[](int index)
    

    ?



  • Bei dem 1. kommt folgender Fehler :

    error: `template<class T> class CListenKnoten' used without template parameters
    error: expected constructor, destructor, or type conversion before "CListenKnoten"

    Und bei dem 2. bleibt weiterhin :

    error: expected constructor, destructor, or type conversion before "CListenKnoten"





  • Bei mir funktioniert's mit dem Compiler von der 2005er EE mit Folgendem:

    template<typename T>
    typename CListenKnoten<T>::SListenKnoten CListenKnoten<T>::operator[](int index)
    

    Welchen Compiler nutzt du denn, Freaky?



  • Ja das geht jetzt auch bei mir. Ich benutze Code::Blocks.
    Danke schön @ Badestrand 😃



  • Das selbe Problem hatte ich letztens bei code::Blocks auch. aber noch ein Kleiner Hinweis.Gib eine Referenz auf das Element an der Stelle zurück sonst kannst du keinen Zuweisung machen die so ausehen:

    liste[1] = 5;
    


  • Öhm was mir aufgefallen ist, wenn du den Indexoperator überlädst, solltest du doch aber kein Listenknoten zurückgeben? Sondern den Wert an der Stelle, daher wäre sicherlich ein

    T& operator[](int index);
    

    angebrachter.

    Edit: das const an der funktion weggenommen, war müll.



  • T& operator[] (size_t index)
    const  T& operator[] (size_t index)      const;
    

    oder brauchst du da unbedingt nen unsigned? ^^
    bb


Anmelden zum Antworten