0

次のコンパイルエラーが発生します。

main.cc: In function 'int main(int, char**)':¶
main.cc:200: error: no match for 'operator==' in 'rt1 == rt2'¶
triple.hh:124: note: candidates are: bool Triple<T1, T2, T3>::operator==(const    Triple<T1,T2, T3>&) [with T1 = int, T2 = int, T3 = int] <near match>¶
main.cc:27: note:                 bool operator==(const Special&, const Special&)¶

テンプレートクラスに対して次のようにoperator==オーバーロードを実装しましたが:

bool operator==(const Triple<T1, T2, T3>& another) {
    return (a == another.first() and b == another.second() and c == another.third());
}

私のテンプレートクラスの場合:

template <typename T1, typename T2, typename T3>
class Triple

問題が何であるか知っていますか?どうもありがとう。

4

1 に答える 1

1

ブール演算子は非定数として宣言されています。rt1const参照の場合は、次のように修正してください。追加されたconstキーワードに注意してください。

bool operator==(const Triple<T1, T2, T3>& another) const {

説明:C ++には、比較演算子をオーバーロードするための2つの基本構文があります。他の1つの引数を持つメンバー演算子、または2つの引数を持つ静的演算子。ただし、どちらの場合も、両方のオペランドがconstそれぞれの構文であることを確認する必要があります。

理論的には、微妙に異なることを行う異なるバージョンの演算子constと非constバージョンの演算子を提供することが可能であるため、コンパイラーはユーザーをほぼ一致と呼びますが、それでも一致ではありません。

于 2012-10-15T11:44:45.393 に答える