我有这门课
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);
...
}
Run Code Online (Sandbox Code Playgroud)
...移动构造函数,移动赋值运算符
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;
}
Run Code Online (Sandbox Code Playgroud)
和主要:
...
Matrix e=b+c;
std::cout<<"e="<<std::endl;
e.print();
Run Code Online (Sandbox Code Playgroud)
我有这个错误:
警告:对局部变量“sumMatrix”的引用返回 [-Wreturn-local-addr] 矩阵 sumMatrix(size);
有人可以帮我解决这个问题吗??
按值返回,operator+大多数情况下您应该这样做:
// vvv--Removed & vvvvv-----vvvvv--Const is more appropriate here
Matrix operator+(Matrix const &m) const { ... }
Run Code Online (Sandbox Code Playgroud)
这将需要一个复制构造函数,确保添加它。另请注意,您可能应该将 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;
}
Run Code Online (Sandbox Code Playgroud)