【发布时间】:2014-10-09 10:21:25
【问题描述】:
我正在为 POD、STL 和像数组这样的复合类型开发小型(漂亮)打印机。在这样做的同时,我也在摆弄初始化列表并遇到以下声明
std::vector<double[3]> arr{ { 10, 11, 12 }, { 20, 21, 22 } };
似乎 VC2013 和 G++ 4.8 都不太满意,并发出一致的错误消息,这两种情况都对我没有太大帮助
对于 VC++: error C3074: an array can only be initialized with an initialize-list
对于 G++ 4.8: error: array must be initialized with a brace-enclosed initialize
所以这里要么不能使用初始化列表,要么我的语法完全不对?
在类似的方面,以下语法似乎是有效的
std::vector<std::array<int, 3>> arr{ { 10, 11, 12 }, { 20, 21, 22 } };
我的初始化列表可能有什么问题?
-
注意 我知道我应该使用
std::array而不是 C 类型数组,但我只是在试验。 - 注意如果你不想玩这个,这里有一个IDEONE 版本
- 注意另外,如果您能将我推荐回标准,那将是非常有益的。
【问题讨论】:
-
可能是您需要额外一对花括号
arr{{{ 10, 11,12}, {20, 21,22}}}的情况之一? -
@LevLandau:不,这不能解决问题。
-
根据我使用 VC2010 的经验,它不喜欢初始化器中的多级花括号。尝试移除除最外层之外的所有大括号。这对我很有用,虽然我不记得曾在模板类中使用过它。
-
@Logicrat:实际上我使用的是应该支持统一初始化列表的 VC2013。我已经用 g++ 进行了交叉检查
-
向量要求类型是可移动的和可移动的。
标签: c++ arrays visual-c++ c++11 initialization-list