我有一个简单的运算符+重载方法,用于类Macierz,它应该从对象获得2d矩阵变量,并将所有这个矩阵变量与另一个Macierz对象的相同字段相加.
Macierz & operator + (Macierz &f) {
Macierz newM;
for (int i = 0; i < length; i++)
for (int j = 0; j < length; j++)
newM.macierz[i][j] = macierz[i][j] + f.macierz[i][j];
return newM;
}
Run Code Online (Sandbox Code Playgroud)
计算工作正常.显示newM变量会产生正确的值,但是当我尝试使用它时:
float y[3][3] = { {1.00f, 2.00f, 3.00f}, { 4.00f, 5.00f, 6.00f }, { 7.00f, 8.00f, 9.00f } };
Macierz m5(y); //fill m5 array with values from above
Macierz m2(2.00f); //fill m2 entirely with 2.00f values
cout << m2 + m5;
Run Code Online (Sandbox Code Playgroud)
结果是一个零数组.
怎么会发生这种情况?的macierz变量是一个简单的float[3][3]字段.
任何帮助都会很棒
结果是一个零数组.
您正在返回对函数局部变量的引用.函数返回后,引用将成为悬空引用.因此,您的程序具有未定义的行为.
将函数更改为按值返回.
// Remove the reference type specifier
// |
// v
Macierz operator + (Macierz &f) {
Macierz newM;
...
return newM;
}
Run Code Online (Sandbox Code Playgroud)
我建议对该功能进行进一步的改进.
const成员函数.const&.通过这些更改,您也可以使用使用const对象的功能.
Macierz operator + (Macierz const& f) const {
Macierz newM;
...
return newM;
}
Run Code Online (Sandbox Code Playgroud)
相关帖子:是否可以使用重载运算符来实现另一个运算符重载?.