Mik*_*ike 3 c++ qt static const
我在Ah中有以下代码:
class A
{
public:
...
private:
...
const int X = 1;
float Y[X];
...
};
Run Code Online (Sandbox Code Playgroud)
如果项目中只包含标题Ah,则编译很好.但是,如果我包括啊,让我们说A.cpp它会给我带来如下奇怪的错误:
...警告:非静态数据成员初始化程序仅适用于-std = c ++ 11或-std = gnu ++ 11 [默认启用]
...错误:无效使用非静态数据成员'A :: X'
......错误:从这个位置
即使我改变了const int X = 1;(虽然我需要它作为常量参数),但没有任何改变.
ps如果有意义我使用的是Qt 5.1
pss实际上使它static修复了错误.但为什么我必须这样做?
第一个问题是你正在编译旧版本的C++,它不允许在声明中初始化非静态(即每个对象而不是每个类)成员.您可以针对C++ 11进行编译(如错误消息所示); 或者在构造函数中初始化它; 或者static,如果您不需要为您创建的每个对象分别设置一个值.
第二个问题是数组大小必须是编译时常量.非静态成员const或其他方式不适合该法案.原则上,它可以在不同的对象中具有不同的值(即使它在声明中初始化,它可以被一个或多个构造函数覆盖),因此没有编译时值.静态成员的确具有固定值,所以可以被用作阵列大小,如果该值是可用的.