在创建一类二维矩阵时遇到了这个问题:
错误:
E0461 非常量参数引用的初始值必须是左值
C2440 返回:无法将“Matrix::MatrixRow”转换为“double &”
意思很清楚:Matrix 类中的运算符 [] 返回指向其中一行的指针,然后 MatrixRow 类中的运算符 [] 从数组中返回元素本身。实际上,下面这段代码是 Chat GPT 写给我的,因为这是我第一次遇到这样的语法,我只是想知道我到底做错了什么。我在 stack overflow western 上找到了一篇有此错误的文章,但我不知道如何将此解决方案应用于我的示例 https://stackoverflow.com/questions/55083497/c-cannot-convert-input-param-to-reference中的错误
class MatrixRow{
public:
MatrixRow(double* matrixRow) : matrixRow(matrixRow) {}
double& operator[](int index){
return matrixRow[index];
}
private:
double* matrixRow;
};
class Matrix{
MatrixRow& operator[](int index){
return MatrixRow(matrix_arr[index]);
}
private:
double** matrix_arr;
};
返回该行的副本。该数组由单个指针组成,通过值返回它不会影响性能。
附注:阅读有关指针和链接的教程。以及他们人生中的那些时光。
您正在引用一个临时对象。它只是您脑海中记忆位置的副本。指针指向内存
最好将 MatrixRow 类全部删除,并返回指向双精度数组的常规指针