struct GameState
просто объявляет тип (так же, как int
это просто тип).Вы должны создать реальную структуру в памяти с GameState foo;
, похожим на обычную переменную (int foo;
).И вы не можете получить доступ к содержимому структуры, не ссылаясь на структуру, как foo.tiles
.tiles
сам по себе не известен в этой области.
Впоследствии вы можете получить доступ к структуре с помощью foo.tiles[i][j].revealed
.
Но чтобы иметь доступ к этой структуре в вашей функции, вы должны либопередайте его функции в качестве указателя или объявите структуру в файловой области (также называемой глобальной).Я бы предпочел, чтобы первая версия была более понятной, например, больше функций.
Ваша функция будет выглядеть так:
void intialize_mines( GameState *foo){
for (int i =0; i < NUM_TILES_X; i++){
for (int j =0; j < NUM_TILES_Y; j++){
foo->tiles[i][j].revealed = false; // -> is a special operator for pointers to structs. It's the same as (*foo).
}
}
}
соответствующий вызов функции будет:
GameSate bar;
intialize_mines( GameState &bar);
Вы также должны проверить, как использовать многомерные массивы.Вы объявили это правильно с двумя отдельными []
, но в своей функции вы используете [x,y]
, что неверно в C. Это будет так же, как в объявлении tiles[i][j]