У меня есть ошибка C2078 в VC2010 при компиляции кода ниже.
struct A
{
int foo;
double bar;
};
std::array<A, 2> a1 =
// error C2078: too many initializers
{
{0, 0.1},
{2, 3.4}
};
// OK
std::array<double, 2> a2 = {0.1, 2.3};
Я выяснил, что правильный синтаксис для a1
-
std::array<A, 2> a1 =
{{
{0, 0.1},
{2, 3.4}
}};
Вопрос: зачем нужны дополнительные фигурные скобки для a1
, но не обязательные для a2
?
Обновление
Вопрос, похоже, не определен для std:: array. Некоторые примеры:
struct B
{
int foo[2];
};
// OK
B meow1 = {1,2};
B bark1 = {{1,2}};
struct C
{
struct
{
int a, b;
} foo;
};
// OK
C meow2 = {1,2};
C bark2 = {{1,2}};
struct D
{
struct
{
int a, b;
} foo[2];
};
D meow3 = {{1,2},{3,4}}; // error C2078: too many initializers
D bark3 = {{{1,2},{3,4}}};
Я все еще не понимаю, почему struct D
дает ошибку, но B и C не делают.