¿Por qué no se puede inicializar (con llaves) 2D std :: array? [duplicar]
Posible duplicado:
c ++ por qué el comportamiento de initializer_list para std :: vector y std :: array son diferentes
Definí 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 el error gcc4.5: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}}
}};