我正在实现一个Vector类,并将乘法运算符定义为该类的成员
Vector operator*(const float& s);
据我了解,这意味着左操作数是Vector
,右操作数是float
。所以,如果我尝试做这样的事情
Vector c(1,2,3);
Vector d = c * 2.0f; // Results in d = (2,4,6)
没关系,但是,对我来说,首先看向量然后是缩放因子是很奇怪的,所以为了float * Vector
我将非成员函数定义为
Vector operator*(const float& s, const Vector& v)
{
//Invalid operands to binary expression 'const Vector' and 'float'
return v * s;
}
但是我收到了评论中的错误。我不知道我错过了什么,或者这不是我应该声明运算符以便以float * Vector
方式进行缩放的方式。
答案 0 :(得分:5)
请注意,您将v
作为const Vector &
传递,但您的成员operator*
未标记为const
。所以它只能在非const Vector
对象上调用。这肯定是不你想要的,所以只需将成员标记为const
:
Vector operator*(const float& s) const;