1

重複の可能性:
C++で単項マイナス演算子をオーバーロードする方法は?

いくつかの演算子をオーバーロードするクラス C があります。

class C
{
  ...
  C& operator-=(const C& other) {...}
  const C operator-(const C& other) {...}
}
inline const C operator*(const double& lhs, const C& rhs)

今、タイプCのオブジェクトを反転したかった

c = -c;

そしてgccは私に次のエラーを与えます:

no match for >>operator-<< in >>-d<<
candidate is: const C C::operator-(const C&)

c = -1*c を使用しても機能しますが、それを短縮できるようにしたいと考えています。私のクラスには何が欠けていますか?


解決済み: 単項演算子を追加しました-:

C operator-() const {...}

Cのメンバーとして

4

3 に答える 3

5

二項 - 演算子をオーバーロードしました。また、単項 - 演算子をオーバーロードすることも必要です

見る

C++で単項マイナス演算子をオーバーロードする方法は?

単項 - 演算子をオーバーロードする方法について

于 2012-11-29T18:22:23.863 に答える
3

バイナリ -、バイナリ*、および複合代入-=演算子をオーバーロードしました。式c = -c単項 -を使用しますが、これはオーバーロードすることはありません。

-スタンドアロン(おそらく友達)関数で単項をオーバーロードしたい場合は、それに応じて宣言する必要があります。friendキーワードを追加するだけで、クラス定義内で実行できます。

class C
{
  ...
  friend C operator-(const C& other) {...}
};

または、関数宣言をクラス定義の外に移動することによって

class C
{
  ...
};

inline C operator -(const C& other) {...}

または、単項-をメンバーとして宣言する場合は、パラメーターなしで宣言する必要があります

class C
{
  ...
  C operator-() const {...}
};
于 2012-11-29T18:29:16.943 に答える
0

この変更を行います:

const C operator-() {...}
于 2012-11-29T18:25:50.020 に答える