C++ 运算符重载不会';行不通

C++ 运算符重载不会';行不通,c++,C++,我正在创建一个matrix3x3类,虽然我拥有所需的功能,但是操作符重载对于*=,+=,-=和/=都不起作用。以下是我所拥有的: mat3 operator*(const mat3 &m); // Declared within mat3 class mat3 mat3::operator *=(const mat3& m) // How it's implemented { *this = *this * m; return *this; } 只需说一句,它

我正在创建一个matrix3x3类,虽然我拥有所需的功能,但是操作符重载对于
*=
+=
-=
/=
都不起作用。以下是我所拥有的:

mat3 operator*(const mat3 &m); // Declared within mat3 class

mat3 mat3::operator *=(const mat3& m) // How it's implemented
{
    *this = *this * m;
    return *this;
}
只需说一句,它有点起作用;但这就是我想要的用法:

mat3 m; // Initialise to identity matrix

m *= mat3(2.0); // Multiply matrix by scalar and apply
问题是它根本不会影响矩阵
m
保持不变,即使我刚刚对其执行了
*=mat3(2.0)
操作。然而,这是可行的:

m = m *= mat3(2.0);
这太傻了,因为我还不如:

m = m * mat3(2.0);
关键是上面所有的乘法必须返回相同的结果。这里既没有近似,也没有妥协。坦率地说,所有与
*=
+=
等相关的运算符都不起作用。我如何使这种运算符重载工作,使矩阵相乘并应用该乘法可以像以下操作一样简单:

m *= mat3(2.0)

根据运算符*=写入运算符*。你搞错了。想想它会返回什么:
mat3 mat3::operator*=(const mat3&m)
。然后读@richardhoges,你能解释一下吗?我猜你的复制赋值操作符或复制构造函数没有正确实现。要获得好的答案,请在返回类型
mat3&mat3::operator*=(const mat3&m)