1

文字列と命令のベクトルという 2 つのものを持つ、Something というクラスがあります。そのクラスで、operator== を定義したいと思います。ただし、コンパイルしようとするとエラーが発生します。

error: no match for ‘operator==’ in ‘* __first1 == * __first2’

これは、Something で == を使用して 2 つのベクトルを比較している行で発生しました (ベクトルには便利に定義されているので、それを使用したいと思います)。

指示は次のとおりです。

struct instruction
{
    int instr;
    int line;

    bool operator==(const instruction& rhs)
    {
        return (instr == rhs.instr) && (line == rhs.line);
    }
};

私は役に立たない解決策を探しました。STL からのベクトルは、これらの要素を比較するときに、構造体に定義した operator== を認識していないようです。

4

3 に答える 3

3

実際に失敗しているコードは示していませんが、次のようなシナリオである可能性が最も高いです。

int main()
{
  vector <instruction> ins;
  vector <instruction>::const_iterator itA = /*...*/, itB = /*...*/;
  bool b = (*itA == *itB);
}

この場合、問題は でoperator==はないという事実ですconst。宣言を次のように変更します。

bool operator==(const instruction& rhs) const
                                       ^^^^^^^
于 2013-11-06T20:07:26.810 に答える
1

修飾子 const を演算子 == に追加してみてください。また、ベクトルの宣言方法と使用方法も示していません。

于 2013-11-06T20:03:54.947 に答える