我是新手重载运算符,我做了一些搜索并发现了this helpful article,我写了自己的代码,就像作者所做的那样但我得到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使用wine windows程序加载器在linux上运行dev-C++
。
答案 0 :(得分:15)
因为您将operator*()
定义为成员函数,所以已经存在一个隐式参数:调用该方法的对象!因此,成员函数采用一个显式参数,而不是两个。
答案 1 :(得分:7)
只需在类外声明操作符重载函数即可。您还要返回一个可能不是您想要的const。
class foo {
//code
};
foo operator*(foo& lhs, bar& rhs) const;
foo operator*(bar& lhs, foo& rhs) const;