C ++与运营商不匹配*

时间:2014-10-04 15:29:30

标签: c++ overloading operator-keyword

我想重载运算符:

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')

有什么问题?

2 个答案:

答案 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。 如果您作为非成员非朋友和静态(在外部类声明中定义)

,这甚至可以工作
相关问题