передача массивов в функции C для обновления структур - PullRequest
0 голосов
/ 03 июля 2018

Я выполняю задание в универе, основанное на игре гомоку.

Как часть процесса, я инициализирую игровую доску, затем инициализирую игру, это структуры, определенные в заголовочных файлах, и мы должны использовать определенные вызовы и не использовать глобальные переменные (или терять метки), но я немного запутался в процессе:

Заголовочный файл:

struct game
{
 struct player players[NUM_PLAYERS];
 board gameboard;
 struct player* current, *other;
};

enum input_result init_game(struct game*);

void play_game(void);

файл заголовка доски

enum cell
{
  C_EMPTY,
  etc...
};

typedef enum cell board[BOARDHEIGHT][BOARDWIDTH];

void init_board(board);

в основном

Я создал доску (2d массив) с именем bd, прекрасно ее инициализировал, а затем добавил значения в каждую ячейку в отдельном файле c

в файле game.c Я инициализировал структуру игры и вызвал функцию, прохождение адреса игровой структуры

struct game curgame;
init_game(&curgame);

У меня проблема с передачей доски в структуру:

enum input_results init_game(struct game* newgame)
{
  newgame.board = bd;

}

Это неверно, и я получаю сообщение об ошибке:

newgame не объявлено (первое использование в этой функции) bd не объявлен (первое использование в этой функции)

Может ли кто-нибудь объяснить мне, как будто мне пять лет, как передать значения в функцию, чтобы я мог добавить их в структуру, не редактируя вызов функции?

любая помощь будет оценена

1 Ответ

0 голосов
/ 03 июля 2018

Во-первых, newgame - это указатель на структуру, а не на структуру, поэтому вы не можете использовать оператор доступа к элементу .. Вместо этого вам нужен указатель на член оператора -> для доступа к членам.

Во-вторых, поскольку элемент gameboard является массивом, его нельзя назначить напрямую. Вместо этого передайте newgame->gameboard функции, которая инициализирует плату.

...