vacio read multidimensional matriz initialize define declarar bidimensional array c++ stl c++11 initialization

c++ - read - ¿Por qué no se puede inicializar(con llaves) 2D std:: array?



javascript multidimensional array undefined (1)

std::array<T, N> es un agregado que contiene una matriz en C. Para inicializarlo, necesita llaves externas para la propia clase y llaves internas para la matriz C:

std::array<int, 3> a1 = { { 1, 2, 3 } };

La aplicación de esta lógica a una matriz 2D da esto:

std::array<std::array<int, 3>, 2> a2 { { { {1, 2, 3} }, { { 4, 5, 6} } } }; // ^ ^ ^ ^ ^ ^ // | | | | | | // | +-|-+------------|-+ // +-|-+-|------------+---- C++ class braces // | | // +---+--- member C array braces

Posible duplicado:
c ++ por qué el comportamiento de initializer_list para std :: vector y std :: array son diferentes

Definí una matriz 2D simple (3X2):

std::array<std::array<int,3>,2> a { {1,2,3}, {4,5,6} };

Me sorprendió que esta inicialización no funcione, con gcc4.5 error: too many initializers for ''std::array<std::array<int, 3u>, 2u>''

¿Por qué no puedo usar esta sintaxis?

Encontré soluciones, una muy divertida con aparatos adicionales, pero me pregunto por qué el primer enfoque más fácil no es válido.

Soluciones:

// EXTRA BRACES std::array<std::array<int,3>,2> a {{ {1,2,3}, {4,5,6} }}; // EXPLICIT CASTING std::array<std::array<int,3>,2> a { std::array<int,3>{1,2,3}, std::array<int,3>{4,5,6} };

[ACTUALIZAR]

Ok, gracias a KerrekSB y los comentarios me dan la diferencia. Así que parece que hay muy pocas llaves en mi ejemplo, como en este ejemplo C:

struct B { int array[3]; }; struct A { B array[2]; }; B b = {{1,2,3}}; A a = {{ {{1,2,3}}, {{4,5,6}} }};