在c ++中创build一个常量数组

有什么理由为什么codeblocks告诉我,我不能做一个数组? 我只是想做:

const unsigned int ARRAY[10] = {0,1,2,3,4,5,6,7,8,9}; 

这是给我的

错误:在'{'标记之前,不允许使用大括号初始化程序

我已经改变了初始化器的其他部分,但错误总是说同样的事情。 这似乎没有道理,因为这是我在c ++中学到的第一件事情之一。

你说你在一个class里做了这个,作为一个私人variables。

回想一下(现在),成员variables可能不会在声明它们的地方初始化 (有一些例外)。

 struct T { std::string str = "lol"; }; 

不好。 它一定要是:

 struct T { std::string str; T() : str("lol") {} }; 

但是,为了增加伤害,pre-C ++ 0x你不能初始化ctor-initializer中的数组!

 struct T { const unsigned int array[10]; T() : array({0,1,2,3,4,5,6,7,8,9}) {} // not possible :( }; 

而且,因为你的数组的元素是const ,所以你不能依赖赋值:

 struct T { const unsigned int array[10]; T() { for (int i = 0; i < 10; i++) array[i] = i; // not possible :( } }; 

然而,正如一些其他的贡献者已经正确地指出,如果你不能修改它的元素,那么对每个T实例拷贝一个数组似乎没有什么意义。 相反,你可以使用static成员。

所以,下面最终将解决你的问题 – 可能 – 最好的方法:

 struct T { static const unsigned int array[10]; }; const unsigned int T::array[10] = {0,1,2,3,4,5,6,7,8,9}; 

希望这可以帮助。

由于这是一个类中的私有成员variables(根据注释),这在C ++ 03中确实是不允许的。

部分被现代编译器支持的C ++ 0x允许编译以下代码:

 class C { const unsigned int ARRAY[10]; public: C() : ARRAY{0,1,2,3,4,5,6,7,8,9} {} }; int main() { C obj; // contains a non-static const member: non-assignable } 

但是,非静态const成员只有在类的不同实例中包含不同的值时才有意义。 如果每个实例都包含相同的{0,1,2,3,4,5,6,7,8,9} ,那么应该使其成为static ,这也使得在C ++ 98中可以做到这一点:

 class C { static const unsigned int ARRAY[10]; public: C() {} }; const unsigned int C::ARRAY[10] = {0,1,2,3,4,5,6,7,8,9}; int main() { C obj; }