没有operator =匹配这些操作数c ++,即使所述运算符已经过载

时间:2018-02-05 02:36:47

标签: c++

我正在尝试为我的vector类和我的矩阵类进行乘法。

Vector2f Matrix3x3::operator * (Vector2f & v) {
    float vx = e11 * v.x + e21 * v.y + e31;
    float vy = e12 * v.x + e22 * v.y + e32;
    return Vector2f(vx, vy);
}

当矩阵与向量相乘时,它应该返回一个向量。所以我尝试将结果设置为已经创建的矢量对象。

Vector2f d(12, 12);
Matrix3x3 m = translationMatrix(transX, transY);
d = m * d;

VS一直强调我的" ="并且说没有运算符=匹配这些操作数,操作数类型是Vector2f和Vector2f。即使我已经在Vector2f类中重载赋值运算符

Vector2f & Vector2f::operator = (Vector2f & V) { 
    x = V.x;
    y = V.y;
    return *this;
}

我甚至不知道我哪里错了。有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:4)

Matrix3x3::operator *按值返回,这意味着m * d返回的对象是临时的,不能绑定到非常量的左值(即Vector2f &);但它可以绑定到对于const的lvalue-reference(即const Vector2f &)。

要解决此问题,您可以将operator=的参数类型更改为const Vector2f &,您也应该这样做,因为该参数不应在operator=内修改。

Vector2f & Vector2f::operator = (const Vector2f & V) { 
    x = V.x;
    y = V.y;
    return *this;
}