我想重载运算符:
static Vector operator*(float s, Vector right){
Vector result(right.getX()*s, right.getY()*s, right.getZ()*s);
return result;
}
当我想使用它时:
Vector a(0,1,5)
Vector v(4*a);
我得到了:
error: no match for 'operator*' (operand types are 'int' and 'Vector')
有什么问题?
答案 0 :(得分:-1)
根据C ++标准(13.5重载运算符)
6运算符函数应为非静态成员函数或 是一个非会员职能
将类外的函数定义为
Vector operator *( float s, const Vector &right )
{
Vector result( right.getX() * s, right.getY() * s, right.getZ() * s );
return result;
}
考虑到成员函数getX(),getY()和getZ()应使用限定符const定义。例如
float getX() const;
答案 1 :(得分:-1)
您需要声明(在类声明中)operator *作为非静态非成员和朋友,如:
friend Vector operator*(float s, Vector right);
并定义为(外部类声明):
Vector operator*(float s, Vector right){
return Vector(right.getX()*s, right.getY()*s, right.getZ()*s);
}
运算符*在此用作二元运算符。如果你作为成员,那么第一个参数被隐式地当作当前对象(*适用于*,例如,如果你使用x * y,那么operator *适用于x作为成员)。但是,对于非成员,两个参数都可以是非Vector类型,并且可以根据需要转换为Vector。 如果您作为非成员非朋友和静态(在外部类声明中定义)
,这甚至可以工作