声明一个静态私有数组成员

时间:2015-04-12 19:20:31

标签: c++ arrays static mingw

我的foo类需要一个静态C ++ array作为私有成员,我最终以这种方式声明:

class Foo : public Bar {

private:

    constexpr static array<int, 18> rouges = {1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36};
    // ...
}

但编译器抛出

error: array must be initialized with a brace-enclosed initializer
error: too many initializers for 'const std::array<int, 18u>'

有趣的是,我的数组大小恰好是18个元素,如果我声明array<int, 500>,我仍然会收到too many initializers错误。至于括号括起的初始化程序错误,我不明白编译器期望读取的内容。

我通过查看 Stroustrup的C ++之旅(11.3.1 array)来记录自己,但我不知道他是如何以不同的方式做到的。或者,删除constexpr static关键字并不能消除错误。

感谢您的见解。

1 个答案:

答案 0 :(得分:0)

再使用一对大括号

constexpr static array<int, 18> rouges = { { 1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36 } };
    // ...

实际上有两个聚合,其中一个聚合在另一个聚合中。

std;:数组的初始化定义如(23.3.2.1类模板数组概述)

  

2数组是一个聚合(8.5.1),可以用它初始化   语法数组a = { initializer-list };哪里   initializer-list是一个逗号分隔的列表,最多包含N个元素   类型可以转换为T.

和(8.5.1聚合)

  

11可以在初始化列表中删除大括号,如下所示。 如果   初始化列表以左括号开头,然后成功   逗号分隔的initializer-clauses列表初始化成员   分组;有更多的是错误的   初始化者 - 条款比成员。