2012-02-18 23 views
2

現在、リンクされたリストに==演算子のオーバーロードを行っています。私は、しかし、この方法では、それは行かないが呼び出されたときに、次のコードオーバーロード==関数が呼び出されない

void test() 
    { 
     bool flag; 
     if (vlist.begin()==vlist.begin()) 
     { 
      flag=true; 
     } 
    }; 
}; 

と私のヘッダファイルにメソッドを作成し

class sqrlst 
{ 
public: 
std::vector<int> vlist; 

bool operator == (iterator const & rhs) 
{ 
    return this->iter == rhs.iter; 
}; 

:私は次のように設定私のヘッダー内の演算子を持っていますif文にヒットすると、オーバーロードされた==演算子関数に渡されます。デバッグポイントをオーバーロード機能に置くと、そのラインには到達しないと言われます。

ご意見やご提案をいただければ幸いです。ありがとう!

EDIT:vlistはintのリストです。

+0

'begin()'はどのような型を返しますか? – tzaman

+0

@tzaman iterator – Johnston

+1

'sq_list'に' operator == 'を定義したようです。しかし、あなたが実行している比較は 'iterators'にあります。もしそうなら、 'operator =='は呼び出されません。 'vlist == vlist'を実行すると呼び出されます。 – Naveen

答えて

3

さて、std::vector部材は、ベクトルオブジェクトは、constまたは非constであるかどうかに応じて、begin()end()戻り型std::vector<T>::iteratorのイテレータ、または`std::vector<T>::const_iteratorに機能します。それが何であれ、反復子の型はあなたによって定義されません。クラスsqrlist==がオーバーロードされても何も起こりません。オーバーロード==は、ベクトルのイテレータクラスのメンバである必要があります。ではなく、が編集可能です。

ベクトルの反復子クラスは、すでに==!=演算子をオーバーロードしています。だから、==を使ってイテレータを比較すると、それはvectorのイテレータクラスのメンバ関数を呼び出しています。

+1

私はイテレータでなければならないというあなたの正しいことを信じています。私はそれを元に戻してconstを追加しましたが、私のブレークポイントはまだ届いていないと言います – Johnston

+0

vlistは私の値のリストで、sq_listはそれ以前にそのクラスを持っていた私のクラスです - – Johnston

+0

@Mankarse:Good one!編集されました。 – Nawaz

関連する問題