gpt4 book ai didi

c++ - 从类型 ‘Matrix&’ 的右值初始化类型 ‘Matrix’ 的非常量引用无效

转载 作者:行者123 更新时间:2023-11-27 23:50:17 30 4
gpt4 key购买 nike

我有一个矩阵类,它有一组函数,其中一个是矩阵运算符++();

构造函数:

Matrix(int num_rows,int num_col,int initialization,double initializationValue)
{
this->num_rows=num_rows;
this->num_col=num_col;
if((num_rows*num_col)==0){values=NULL;return;}
values = new double*[num_rows];
for(int index_row=0;index_row<num_rows;index_row++)
{
values[index_row]=new double[num_col];
for(int index_col=0;index_col<num_col;index_col++)
{
switch(initialization)
{
case MI_ZEROS: values[index_row][index_col] =0; break;
case MI_ONES: values[index_row][index_col]=1;break;
case MI_EYE: values[index_row][index_col]=(index_row==index_col)? 1:0;break; //I matrix
case MI_RAND: values[index_row][index_col]=(rand()%1000000)/1000000.0;break;
case MI_VALUE: values[index_row][index_col]=initializationValue;break;
}
}

}
}

添加函数:

void Matrix::add(Matrix& m)
{
if(num_rows!=m.num_rows||num_col!=m.num_col)
throw("Invalid Matrix dimensions for add operation");

for(int iR=0; iR<num_rows; iR++ )
for(int iC=0; iC<num_col; iC++)
values[iR][iC] += m.values[iR][iC];
}

当我尝试这样定义它时:

Matrix Matrix::operator++()
{
const double d = 1.0;
add(Matrix(num_rows, num_col, MI_VALUE, d));
return *this;
}

我收到这个错误:

matrix.cpp:367:45: error: invalid initialization of non-const reference of type ‘Matrix&’ from an rvalue of type ‘Matrix’

add(Matrix(num_rows, num_col, MI_VALUE, d));

note:initializing argument 1 of ‘void Matrix::add(Matrix&)’ void Matrix::add(Matrix& m)

我真的不明白为什么会出现这个问题以及如何解决它,因为它在许多不同的功能中经常发生,我该如何解决这个问题?

注意:我使用的是 ubuntu 16.04 和 g++ 编译器。

最佳答案

您没有将 add 的代码包含到帖子中,但我可以从错误中看到它具有签名 void Matrix::add(Matrix& m) .这里的Matrix&表示你传递的对象必须是一个l-value .粗略地说,如果对象有名称,则该对象是左值,而临时变量则没有。

您必须更改add 函数的签名:它必须是add(Matrix a)add(const Matrix& a) .在第一种情况下,函数接收对象的拷贝。在第二种情况下,它接收到一个常量引用,临时对象可以绑定(bind)到常量引用。后者是首选,因为不会制作不必要的拷贝。

如果您不打算在您的函数中修改参数,则永远不要通过引用传递参数(没有 const)。首选 const Type&

关于c++ - 从类型 ‘Matrix&’ 的右值初始化类型 ‘Matrix’ 的非常量引用无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46981659/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com