3 ошибки в объявлении функции, которая возвращает двумерный массив - PullRequest
0 голосов
/ 07 октября 2019

Этот код

int[][] settile(int[][] field, int x, int y, bool player);

в заголовочном файле выдает следующие ошибки:

expected an identifier

при первом [],

an array may not have elements of this type

привторой [] и

expected a ';'

при settile. Где ошибки и как это исправить?

Ответы [ 2 ]

0 голосов
/ 07 октября 2019

Вы можете возвращать и передавать в качестве параметра динамический массив, который в основном представляет собой массив указателей.

Синтаксис:

int** settile(int** field, int x, int y, bool player);

подробнее о 2Dдинамический массив здесь Как мне объявить 2d массив в C ++, используя new?

0 голосов
/ 07 октября 2019

Короче говоря: вы не можете возвращать и передавать 2D-массив этими способами. Используйте векторы (или массив векторов, как предложено в комментариях @ прежней известной_463035818).

Массив - это линейная часть памяти. Оператор [] принимает значение в памяти с некоторым смещением. Так что это равно arr[i] == *(arr + i). Для двумерных массивов компилятору необходимо знать все измерения, кроме одного, поэтому компиляция может использовать его следующим образом: arr[i][j] == *(arr + i * N + j). Когда вы передаете массив в функцию, вы должны указать размеры всех, кроме одного (или всех, вы хотите) измерений. Т.е. void f(int a[][5]);

О возврате 2D массивов. Массив в C ++ - это не тип, это особая форма объявления. Так что возвращать int[][] просто не имеет смысла. Вы должны использовать какую-то оболочку (например, std::array из std::vector), которая будет копировать все данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...