【发布时间】:2020-05-10 21:24:34
【问题描述】:
我有这门课
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();
我有这个错误:
警告:返回对局部变量“sumMatrix”的引用 [-Wreturn-local-addr] 矩阵 sumMatrix(size);
有人可以帮我解决这个问题吗?
【问题讨论】:
-
应该读到这个:What are the basic rules and idioms for operator overloading?,尤其是算术运算部分。
-
Matrix& operator+(Matrix &m);应该是Matrix operator+(const Matrix &m) const;此外,您可能还需要检查m的大小。假设它们的大小相同是有风险的。您可以将大小设为模板参数。
标签: c++ unique-ptr