我的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
关键字并不能消除错误。
感谢您的见解。
答案 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列表初始化成员 分组;有更多的是错误的 初始化者 - 条款比成员。