Это из-за приоритета оператора: *map[center][center].makeExists()
равно *(map[center][center].makeExists())
, но вы имели в виду (*map)[center][center].makeExists()
. Однако вы должны просто написать следующее:
void makeCityTile(hexTile map[32][32], int tile_count) {
int center=tile_count/2;
map[center][center].makeExists();
}
Это потому, что в C и C ++, когда вы передаете массив в функцию, он только передает указатель на этот массив, он не передаеткопия всего массива по значению. См. Что такое распадающийся массив? для получения более подробной информации.
Чтобы избежать путаницы, может быть полезно создать класс для представления карты и добавить функции-члены для управления этой картой. И пока вы занимаетесь этим, C ++ предоставляет std::vector<>
, который обычно является гораздо более приятным способом хранения массива. Вот быстрый пример того, как это может выглядеть:
class Map {
const size_t count;
std::vector<hexTile> tiles;
public:
Map(size_t count): count(count), tiles(count * count) {
// put the initialization code from your main() here
}
hexTile &at(size_t x, size_t y) {
return &tiles[y * count + x];
}
void makeCityTile() {
at(count / 2, count / 2).makeExists();
}
...
};