【发布时间】:2012-08-08 20:34:22
【问题描述】:
所以我创建了一个通用的 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;
错误信息:
error C2678: binary '*' : no operator found which takes a left-hand operand of type 'Matrix2' (or there is no acceptable conversion).
【问题讨论】:
-
这只是一个猜测,但您可以尝试在重载声明之前添加
public修饰符 -
运算符重载在我的 Matrix 类的公共部分。
-
在所有情况下,一个完整的最小可编译示例可以让其他人遇到与您相同的错误。
-
所以这不是继承问题...只是尝试将两个 Matrix 对象相乘,编译器仍然报错。
-
除了@Motti 的回答,尝试将声明更改为
Matrix Matrix::operator*(const Matrix &right){}以使此运算符重载正常工作。
标签: c++ visual-c++ inheritance operator-overloading