アドバイス この回答で与えられた に従って、単純なPoint
クラスの+
演算子を次のようにオーバーロードしました(+ =オーバーロードは正常に機能します)。
Point operator+ (Point p1, const Point& p2)
{
return std::move(p1 += p2);
}
しかし、私は言うエラーが発生します
オーバーロードされた「operator +」は単項演算子または二項演算子である必要があります(3つのパラメーターがあります)
なにが問題ですか?
演算子をメンバー関数として宣言したようです。メンバー関数は暗黙の最初のパラメーターを取ります。つまり、オペレーターは3つのパラメーターを取ります。これを非メンバー関数にすることで修正できます。
いずれの場合も、操作のLHSとRHSの間の対称性を確保するために、非メンバーとして宣言することをお勧めします。
std::move
については、<utility>
ヘッダーにあります。ここで使用する理由はわかりませんが。
次のいずれかを実行します。
// Perform (*this + right)
Point operator+ (Point & right)
または
// Perform (left + right) Friend functions have no "this".
friend Point operator+ (const Point &left, const Point& right)
演算子をメンバー関数にしました。つまり、暗黙の最初のthis
パラメーターを含めると、実際には3つのパラメーターがあります。
どちらか:
*this
のではなく p1
そしてその最初のパラメータを取り除く、または