1
I tried to overload the operator !=

    struct Antichoc 
    { 
        quint8 Chariot; 
        quint8 Frittage;

    bool operator!=(const Antichoc &a, const Antichoc &b) 
    { 
        return a.Chariot != b.Chariot || a.Frittage != b.Frittage; 
    }
    }

エラーが発生します:

bool Antichoc::operator!=(const Antichoc&, const Antichoc&) は引数を 1 つだけ取る必要があります

なぜこのエラー

4

1 に答える 1

6

非静的メンバー関数は、同じ型へのポインターを持つ暗黙の非表示の最初のパラメーターを受け取ります。したがって、メンバー演算子には実際には 3 つのパラメーターがありますが、2 つあるはずです。

非メンバー演算子にすることもできます。

struct Antichoc { .... };

bool operator!=(const Antichoc &a, const Antichoc &b) 
{ 
    return a.Chariot != b.Chariot || a.Frittage != b.Frittage; 
}

または、引数を 1 つだけ取るメンバーにします。

struct Antichoc 
{ 
    quint8 Chariot; 
    quint8 Frittage;

  bool operator!=(const Antichoc& rhs) const 
  { 
    return Chariot != rhs.Chariot || Frittage != rhs.Frittage; 
  }
};

最初のバージョンでは、 への暗黙的な変換が許可されますAntichocが、この特定の例では必要ありません。

通常!=、 の観点から実装することをお勧めし==ます。

C++11 では、 を使用してこれらすべての論理演算子を単純化できることに注意してくださいstd::tie

#include <tuple>

bool operator!=(const Antichoc &a, const Antichoc &b) 
{ 
    return std::tie(a.Chariot, a.Frittage) != std::tie(b.Chariot, b.Frittage); 
}
于 2013-06-10T09:33:48.760 に答える