gpt4 book ai didi

c++ - 错误 : invalid conversion from 'const int*' to 'int*'

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:14 25 4
gpt4 key购买 nike

我想创建一个简单的 3x3 矩阵类并能够通过下标运算符访问其内容。这是代码:

// Matrix.h
class Matrix {
private:
int matrix[3][3];
public:
int* operator[](const int index) const;
};

// Matrix.cpp
int* Matrix::operator[](const int index) const {
return this->matrix[index];
}

无论 Matrix 的对象是常量还是非常量,我都希望能够访问数组的元素。但是我从编译器中得到以下错误:

错误:从“const int*”到“int*”的无效转换 [-fpermissive]

我做了一些研究,我有一个假设:也许,因为我已经将这个成员函数声明为 const 函数,在它的定义中,编译器将对象的所有非可变成员视为(屏蔽)为 const 成员,所以这就是编译器说它是从“const int*”到“int*”的无效转换的原因。 我的问题:这个假设是否正确?如果不是,为什么会这样?我认为这是有道理的,并且是确保“const Matrix *this”对象的常量性的好方法。

编译器信息:从 equation.com 下载的 gcc 5.3.0

最佳答案

关于出现错误的原因,您完全正确:在标记为 const 的成员函数内,编译器隐式处理该类的所有数据成员,就好像它们是用 const 声明的一样 限定符。

修复非常简单 - 您可以覆盖同一个运算符两次,提供 const 和非 const 版本:

class Matrix {
private:
int matrix[3][3];
public:
const int* operator[](const int index) const;
int* operator[](const int index);
};

// Matrix.cpp
const int* Matrix::operator[](const int index) const {
return this->matrix[index];
}
int* Matrix::operator[](const int index) {
return this->matrix[index];
}

编译器会根据上下文确定调用哪个重载。如果 Matrix 本身是 const,它将调用 const 版本,否则将调用非 const 版本。

关于c++ - 错误 : invalid conversion from 'const int*' to 'int*' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35357897/

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