gpt4 book ai didi

c++ - 重载 * 运算符以同时在右侧和左侧工作

转载 作者:可可西里 更新时间:2023-11-01 18:29:30 24 4
gpt4 key购买 nike

我创建了一个类 Matrix,它基本上表示一个数学矩阵。为了使用标量矩阵乘法,我重载了 * 运算符:

Matrix Matrix::operator*(double scalar) const
{
Matrix result(*this);
result *= scalar;
return result;
}

为了让运算符(operator)也从左边工作,我使用了:

Matrix operator*(double a, const Matrix &M)
{
return M * a;
}

给定 Matrix Mdouble sM * s 工作正常但 s * M 给了我一个错误:

Error C2677: binary * : no global operator found which takes type Matrix (or there is no acceptable conversion)

当 IDE 向我显示错误时:“没有运算符 * 匹配这些操作数”

知道可能是什么问题吗?


编辑:这是一个愚蠢的错误!我没有在 header 中声明运算符,编译器看不到声明!很抱歉...

最佳答案

当我遵循 FAQ entry on operator overloading 中给出的建议时(尤其是关于二进制算术运算符的段落)我无法重现您的错误。

这个编译对我来说很好:

struct M {
M& operator*= (float f) {
// multiply this by f
return *this;
}
};

inline M operator* (M m, float f) {
m *= f;
return m;
}

inline M operator* (float f, M m) {
return m * f;
}

int main() {
M m;
float f;
m * f;
f * m;
}

希望对您有所帮助。如果没有,请提供更多代码。

关于c++ - 重载 * 运算符以同时在右侧和左侧工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17198525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com