【发布时间】:2013-08-22 16:32:21
【问题描述】:
我在 A.h 中有以下代码:
class A
{
public:
...
private:
...
const int X = 1;
float Y[X];
...
};
如果项目中仅包含头文件 A.h,则编译良好。但是,如果我在 A.cpp 中包含 A.h,它会给我如下奇怪的错误:
... 警告:非静态数据成员初始化器仅适用于 -std=c++11 或 -std=gnu++11 [默认启用]
...错误:非静态数据成员'A::X'的使用无效
...错误:来自这个位置
即使我更改const int X = 1;(尽管我需要它作为常量参数),也没有任何变化。
附言如果有意义的话,我正在使用 Qt 5.1
附言实际上使它 static 修复了错误。但是为什么我必须这样做呢?
【问题讨论】:
-
很抱歉,我不认为这个问题是重复的。请阅读我的问题更多。
-
不想回答您的问题,但这正是您要问的。为了简单地回答这个问题,您可以将
X设为静态,或者您不能做您想做的事情。 -
我意识到这一点。我的问题是“为什么?”。我想了解为什么我需要这样做,而不仅仅是复制粘贴。
-
如果你想要一个常量数据成员并且成员的值对于类的每个实例总是相同的,那么拥有该成员的多个副本是没有意义的。最好为所有实例使用一个静态成员。
-
当你设法让它工作时,你是如何编译它的?你确定头文件被解析了吗?