2016-04-15 17 views
0

Sorry, wenn die Formatierung ein bisschen aus ist, bin ich neu hier. Ich habe auch versucht, nach Lösungen zu suchen, aber ich konnte keine finden, die funktionierte.Versuch, Operator ++ zu überladen, kann Elementfunktion ohne Objekt nicht aufrufen

Ich versuche, einen Iterator für eine binäre Suchbaumklasse zu erstellen. Sehr grob, sieht mein Code wie

template<class Key, class Value> 
class BST { 
    protected: 
    //stuff 
    public: 
    //stuff 
    class iterator { 
     public: 
     //member functions 
     iterator& operator++() { 
      //gets next node 
     } 
    } 
} 

Also in meiner Hauptfunktion, ich einen Iterator mit

BST<string, int>::iterator it = bst.begin() 

erstellen und es funktioniert. Ich kann mit dem Iterator auf den Knoten zugreifen. Aber in der nächsten Zeile, wenn ich versuche zu

it++; 

erhalte ich Compiler-Fehler, dass ich „Memberfunktion nicht ... ohne Objekt aufrufen können“. Ich verstehe nicht warum nicht? Wenn ich operator ++ auf 'it' anrufe, sollte es nicht einfach auf 'it' operieren?

+1

Der Operator, den Sie überladen haben, ist eine Vorinkrementierung: 'iterator & operator ++ (int)' für die Nachinkrementierung. –

Antwort

4

Postfix Inkrement-Operator Überladung erfordert einen Dummy int Argumet in seiner Signatur - um es von Präfix incerement distringieren. Wie so:

iterator operator++(int) { 
     //gets next node 
    } 

auch zurückgeben Sie in der Regel einen Wert von Postfix Schritt, keine Referenz, da Sie Objekt vorge erhöht zurückzukehren erwartet.