Попытка объявить массив struct room внутри определения структуры room в C - PullRequest
0 голосов
/ 03 сентября 2018

Разве нельзя сделать что-то подобное в C?

struct room{
        //Name of the room
        char* name;
        //Type fo the room
        char* type;
        //Array of outbound connections, max of six
        struct room connections[6];
        //A counter variable for how many connections the room actually has been assigned
        int numOfConnections;
};

Я создаю карту комнат, которые связаны друг с другом, и я подумал, что самый простой способ для каждой комнаты отслеживать комнаты, к которым он подключен, - это создать массив структур комнат, а затем разместить комнаты в их.

Я получаю сообщение об ошибке, в котором говорится, что в массиве указан элемент неполного типа Ошибка в строке "struct room connections [6];"

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Я создаю карту комнат, которые связаны между собой

Решение, которое вы выбрали (иметь массив rooms в структуре room), не представляет вашей проблемы. Это похоже на наличие других rooms в пределах room. И это невозможно сделать, как показывает ваше сообщение об ошибке.

В структуре room необходимо хранить ссылки (или адреса) другого rooms, к которому он подключен. Это возможно, так как это очень четко определенная проблема с четким решением. Таким образом, в struct room вы сохраняете указатели (которые являются адресами) на комнаты, к которым он подключен.

struct room* connections[6]; 

Приведенная выше строка кода означает, что connections - это массив из 6 элементов, которые являются указателями на struct room.

0 голосов
/ 03 сентября 2018

Чтобы хранить struct внутри себя, он должен иметь тип указателя. В противном случае, как упоминалось в комментариях, это struct заняло бы бесконечное пространство. Изменение ниже превращает его в указатель на 6 struct room.

struct room{
        //Name of the room
        char* name;
        //Type fo the room
        char* type;
        //Array of outbound connections, max of six
        struct room* connections[6];
        //A counter variable for how many connections the room actually has been assigned
        int numOfConnections;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...