1. ホーム
  2. c++

[解決済み] オーバーロード * 演算子 - 0個または1個の引数を取る必要があります。

2022-02-08 21:48:25

質問

演算子のオーバーロードは初めてなのですが、検索してみると この記事は参考になります。 というメッセージが表示され、著者が行ったように自分でもコードを書きましたが vector vector::operator*(float, vector) must take either zero or one argument というエラーが発生します。

以下は私のコードです。

class vector
{
      public:
       float x;
       float y;

      vector(float, float);
      float operator$ (vector, vector);
      vector operator* (float, vector);
      vector operator* (vector, float);
};

vector::vector(float _x = 0, float _y = 0)
{
   x = _x;
   y = _y;     
}
const float vector::operator$ (const vector &v1, const vector &v2)
{
    return (v1.x * v2.x) + (v1.y * v2.y);
}

const vector vector::operator* (const float &m, const vector &v)
{
    vector ret_val = v;
    ret_val.x *= m;
    ret_val.y *= m;
    return ret_val;
}

const vector vector::operator* (const vector &v, const float &m)
{
      return m * vector;     
} 

私のオペレーティングシステムは kubuntu 12.04 で、私のIDEは dev-C++ は、wine Windows プログラムローダーを使って、Linux 上で動作しています。

解決方法は?

を定義しているため operator*() それは、このメソッドが呼び出されるオブジェクトです。したがって、メンバ関数は2つの明示的なパラメータではなく、1つの明示的なパラメータを取ります。