我在尝试使用重载运算符+添加两个2D矩阵时遇到问题。我已成功将两个矩阵分配给两个不同的数组。
我的错误是:
在函数`mathadd :: matrices mathadd :: operator +(mathadd :: matrices&,mathadd :: matrices&)':
没有用于调用`mathadd :: matrices :: matrices(double&)'的匹配函数
候选人是:mathadd :: matrices :: matrices(const mathadd :: matrices&)
在我的int main(){}中,此错误的主要部分是:
matrices sample;
double array1[4][4], array2[4][4], add[4][4];
add[4][4] = array1[4][4] + array2[4][4];
重载的运算符定义是:
matrices operator +(matrices& p1, matrices& p2) { double addition[4][4]; for (int y = 0; y < 4; ++y ) { for (int x = 0; x < 4; ++x ) { addition[4][4] = p1.get_array1() + p2.get_array2(); } } matrices sum(addition[4][4]); // This is where the error is. return sum; }
我的班级看起来像这样
class matrices
{
public:
matrices();
void assignment(double one[4][4], double two[4][4]);
double get_array1() const {return first_array[4][4];}
double get_array2() const {return second_array[4][4];}
matrices operator +(matrices& p1, matrices& p2);
private:
double first_array[4][4], second_array[4][4];
//Initialized to 0 in constructor.
};
我不明白这个错误意味着什么,我将不胜感激任何帮助,了解它的意义以及如何解决它。
答案 0 :(得分:3)
addition[4][4]
是一个双重超出范围的数组访问权限,可以从double
命名的第五个double[]
中获取第五个addition
。只需在addition
中传递名称addition[4][4]
,而不是matrices sum(addition[4][4])
。
所以它应该是
matrices sum(addition);
return sum;
这只是编译器错误的来源。您的代码中也存在许多逻辑错误,例如我在前面提到的内部for
循环中的越界数组访问。您将不得不修复这些或者获得未定义的行为。
答案 1 :(得分:1)
您收到错误的原因是您为operator +
类型的对象定义了matrices
,而不是double
的2D数组。您需要在添加矩阵之前构造矩阵,如下所示:
首先,为matrices
添加double[4][4]
的构造函数。然后,将operator +
的签名更改为static
,并对其参数进行const
引用:
static matrices operator +(const matrices& p1, const matrices& p2);
现在你可以这样写:
matrices add = matrices(array1) + matrices(array2);