无效使用非静态数据memeber

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修复了错误.但为什么我必须这样做?

Mik*_*our 5

第一个问题是你正在编译旧版本的C++,它不允许在声明中初始化非静态(即每个对象而不是每个类)成员.您可以针对C++ 11进行编译(如错误消息所示); 或者在构造函数中初始化它; 或者static,如果您不需要为您创建的每个对象分别设置一个值.

第二个问题是数组大小必须是编译时常量.非静态成员const或其他方式不适合该法案.原则上,它可以在不同的对象中具有不同的值(即使它在声明中初始化,它可以被一个或多个构造函数覆盖),因此没有编译时值.静态成员的确具有固定值,所以可以被用作阵列大小,如果该值是可用的.