我想初始化一个二维std ::数组槽初始化器列表但编译器告诉我,有太多的初始化器。你如何初始化(通过初始化列表)在C + + 11中的多维std ::数组?
例如为:
std::array<std::array<int, 2>, 2> shape = { {1, 1},
{1, 1} };
编译器错误:错误:‘std::array<std::array<int, 2ul>, 2ul>’
但显然太多的初始化不会有太多。难道我做错了什么?
我想初始化一个二维std ::数组槽初始化器列表但编译器告诉我,有太多的初始化器。你如何初始化(通过初始化列表)在C + + 11中的多维std ::数组?
例如为:
std::array<std::array<int, 2>, 2> shape = { {1, 1},
{1, 1} };
编译器错误:错误:‘std::array<std::array<int, 2ul>, 2ul>’
但显然太多的初始化不会有太多。难道我做错了什么?
尝试添加多一个对{}
,以确保我们初始化内部C数组。
std::array<std::array<int, 2>, 2> shape = {{ {1, 1},
{1, 1} }};
或者只是放下所有的括号。
std::array<std::array<int, 2>, 2> shape = { 1, 1,
1, 1 };
我建议(甚至没有试图拥有它,所以我可能是错的)
typedef std::array<int, 2> row;
std::array<row,2> shape = { row {1,1}, row {1,1} };
它的工作原理,但我想知道为什么我的版本不。这两种表情看起来都相同。 – 2012-02-29 19:25:14
@zoopp:不,他们没有。巴西尔使用明确的结构,而你不这样做。 – 2012-03-08 13:30:35
我明白了......感谢您的澄清。 – 2012-03-13 18:56:10
它总是觉得我们必须这样做才是抽象的泄漏。只是因为图书馆不是“内在”的语言,而是建立了它,我想。 – 2012-03-08 13:30:51
刚刚尝试过,如果你不需要警告,'std :: array,2> shape = {{{1,1}},{{1,1}}}};'。 EWW –
Jeff
2012-09-29 03:37:47