Подтвердить что ты не робот

Как вы инициализируете (через списки инициализаторов) многомерный std:: array в С++ 11?

Я пытаюсь инициализировать списки инициализаторов 2D std:: array, но компилятор говорит мне, что слишком много инициализаторов.

например:

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

Ошибка компилятора: ошибка: слишком много инициализаторов для ‘std::array<std::array<int, 2ul>, 2ul>’

Но явно их не так уж много. Я что-то делаю неправильно?

4b9b3361

Ответ 1

Попробуйте добавить еще пару {}, чтобы убедиться, что мы инициализируем внутренний массив 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 };

Ответ 2

Я бы предложил (даже не пробовал, поэтому мог ошибаться)

typedef std::array<int, 2> row;
std::array<row,2> shape = { row {1,1}, row {1,1} };