目录
问题
在一个类中,有下述代码
class Circle
{
public:
Circle() {
int b[a] = {0};
};
~Circle() {};
private:
const int a = 10; // 错误做法
};
此时会出现报错:this不能在常量表达式中使用(a nonstatic member reference must be relative to a specific object)
但是,在下述情况下,又可以正常使用
int main()
{
// 测试const定义数组
const int x = 10;
int y[x] = { 0 };
}
解决方法
改写成
class Circle
{
public:
Circle() {
int b[a] = {0};
};
~Circle() {};
private:
// const int a = 10; // 错误做法
static const int a = 10; // 正确做法
};
原因
在C++中,类的构造方法里面调用私有const变量去定义数组,而在类创建的时候调用构造方法,此时还没有加载const变量,即当我们创建一个const对象或变量时,直到构造函数完成初始化过程,对象或变量才能真正取得其常量属性。
Pingback: 机器人位姿反馈控制开发日志 - Fivyex's Blog