我有这门课
class Matrix
{
int size;
std::unique_ptr<std::unique_ptr<int[]>[]> val;
public:
Matrix(int size1)
{
size=size1;
val=std::make_unique< std::unique_ptr<int[]>[] >(size);
...
}
...移动构造函数,移动赋值运算符
Matrix& operator+(Matrix &m)
{
Matrix sumMatrix(size);
for ( int i = 0; i < size; ++i)
{
for (int j = 0; j < size; ++j){
sumMatrix.val[i][j]=this->val[i][j]+m.val[i][j];
}
}
return sumMatrix;
}
和主要:
...
Matrix e=b+c;
std::cout<<"e="<<std::endl;
e.print();
我有这个错误:
warning: reference to local variable 'sumMatrix' returned [-Wreturn-local-addr] Matrix sumMatrix(size);
有人可以帮我解决这个问题吗?
最佳答案
按值返回,就像大多数情况下对 operator+
所做的那样:
// vvv--Removed & vvvvv-----vvvvv--Const is more appropriate here
Matrix operator+(Matrix const &m) const { ... }
这将需要一个复制构造函数,请确保添加它。另请注意,您可能应该将 for 循环逻辑收集到 operator+=
中,并显着简化 operator+
,同时为最终用户提供更多功能:
Matrix& operator+=(Matrix const& m) {
for (int i = 0; i < size; ++i) {
for (int j = 0; j < size; ++j) {
//vvv--No need for this-> in C++
val[i][j] += m.val[i][j];
}
}
return *this;
}
Matrix operator+(Matrix const& m) const {
Matrix sumMatrix{m}; // requires a copy constructor.
sumMatrix += *this;
return sumMatrix;
}
关于c++ - 如何重载 + 来对 C++ 中的 2 个矩阵对象求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61718942/