2016-04-15 4 views
0

申し訳ありませんが、フォーマットが少しオフになっていれば、私はここで新しいです。私も解決策を探してみましたが、うまくいきませんでした。演算子++をオーバーロードしようとしても、オブジェクトなしでメンバ関数を呼び出すことはできません

私は、バイナリ検索ツリークラスのイテレータを作成しようとしています。

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

は、だから私の主な機能には、私は

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

でイテレータを作成し、それが動作するように非常に大まかに、私のコードが見えます。イテレータを使用してノードにアクセスできます。しかし、私がしようとする次の行で

it++; 

私は "オブジェクトなしでメンバ関数を呼び出すことはできません"というコンパイラエラーが発生します。なぜ私は理解できないのですか?私が演算子++を 'it'に呼んでいるのであれば、 'it'だけで動作するべきではないでしょうか?

+1

オーバーロードされた演算子は、プリインクリメントの使用です。ポストインクリメントのための 'iterator&operator ++(int)'です。 –

答えて

4

Postfixのインクリメント演算子のオーバーロードには、ダミーのint argumetが必要です。これは接頭辞incerementから区別するためです。同様に、前もってインクリメントされたオブジェクトを返すことが予想されるため、通常、後のインクリメントからの値ではなく、参照ではなく値を返します。

関連する問題