所以我创建了一个通用的 Matrix 类,它具有以下运算符重载:

class Matrix
{
public:
    Matrix() {}
    Matrix(int i, int j, int k) {}
    Matrix operator*(const Matrix &right)
    {
    }
};

我还有一个从我的 Matrix 类继承的 Matrix2 类。
class Matrix2 : public Matrix
{
};

当我尝试将两个 Matrix2 对象相乘时,出现编译器错误,指出:

'没有找到采用 Matrix2 类型的左手操作数的运算符(或者没有可访问的转换)'

为什么会这样,我如何才能通过继承正确实现运算符重载?

编辑:

正如所指出的,我的问题部分是因为“最令人烦恼的解析”。我相信,现在我的问题与运算符重载和继承密切相关。

我可以很好地将两个 Matrix 对象相乘,但不能将两个 Matrix2 对象相乘。
Matrix2 i;
Matrix2 m;
Matrix result = m * i;

错误信息:

最佳答案

你正在咬最烦人的解析。这是导致声明函数而不是对象的语法错误。

关于C++ 运算符重载和继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11872724/

10-10 16:35