我想重载运算符:
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')
怎么了?
最佳答案
您需要声明(在类声明中)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);
}
运算符 * 在这里用作二元运算符。如果你 make as member,那么第一个参数被隐式地作为当前对象(* 适用于它,例如,如果你使用 x * y,那么 operator * 适用于 x 作为成员)。但是,对于非成员,两个参数都可以是非 Vector 类型,并且可以根据需要转换为 Vector。 如果您将其设置为非成员非 friend 和静态(将在类声明之外定义),这甚至会起作用
关于C++ 不匹配运算符*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26194263/