我正在尝试为我的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;
}
我甚至不知道我哪里错了。有人可以向我解释一下吗?
答案 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;
}