2

現在、リンク リストの == 演算子のオーバーロードに取り組んでいます。ヘッダーに演算子を次のように設定しています。

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

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

次に、次のコードを使用してヘッダー ファイルにメソッドを作成しました

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

ただし、このメソッドが呼び出されると、if ステートメントにヒットしたときにオーバーロードされた == 演算子関数に移動しません。オーバーロード関数にデバッグ ポイントを置くと、行に到達しないと表示されます。

ヒントや提案は大歓迎です。ありがとう!

編集: vlist は int のリストです。

4

1 に答える 1

3

さて、std::vectorメンバー関数は、ベクトル オブジェクトがconst か非定数かによって、 、または型の反復子を返しますbegin()。それが何であれ、反復子の型はあなたによって定義されていません。クラスでオーバーロードしても何も起こりません。オーバーロードは、編集が許可されていないvector の iterator クラスのメンバーである必要があります。end()std::vector<T>::iterator`std::vector<T>::const_iteratorconst==sqrlist==

==また、vector の iterator クラスは既にand!=演算子をオーバーロードしていることにも注意してください。したがって、を使用して反復子を比較すると==、ベクトルの反復子クラスのメンバー関数が呼び出されます。

于 2012-02-18T04:30:07.507 に答える