过载*运算符 - 必须采用零或一个参数

Moh*_*adi 9 c++ operator-overloading

我是新手重载运算符,我做了一些搜索,发现这篇有用的文章,我写了自己的代码,就像作者一样,但我得到了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;     
} 
Run Code Online (Sandbox Code Playgroud)

我的操作系统是kubuntu 12.04,我的IDE dev-C++使用wine windows程序加载器在linux 上运行.

chr*_*ock 16

因为您定义operator*()为成员函数,所以已经存在一个隐式参数:调用该方法的对象!因此,成员函数采用一个显式参数,而不是两个.


ajp*_*013 7

只需在类外声明运算符重载函数即可.你也回来了一个可能不是你想要的const.

class foo {
  //code
};

foo operator*(foo& lhs, bar& rhs) const;
foo operator*(bar& lhs, foo& rhs) const;
Run Code Online (Sandbox Code Playgroud)

  • 这个链接解释了原因.希望能帮助到你.http://stackoverflow.com/questions/4652932/why-define-operator-or-outside-a-class-and-how-to-do-it-properly (2认同)