Как использовать перечисление в структуре в ANSI C?
Следующий код должен использоваться в основной функции, но я не знаю, как он используется.
struct SomeItem
{
enum {MOVIE, MUSIC} itemType;
union {
struct Movie* movie;
struct Music* music;
};
};
эта структура используется в динамическом связанном списке с предыдущим указателем /item/next, но я не знаю, как вы можете установить перечисление. Или как его инициализировать.
Мне нужно знать, как это будет выглядеть в основной функции.
biglist.someitem = ???;
/* declaration I use */
struct Library* biglist;
больше кода, чтобы понять, что я пытаюсь сделать.
struct Library{
struct SomeItem* someitem;
struct SomeItem* previousItem;
struct SomeItem* nextItem;
};
ошибки компилятора:
C2037: слева от 'someitem' указывает undefined struct/union 'library'
C2065: MOVIE: необъявленный идентификатор
Я все еще новичок на ANSI C, поэтому не стреляйте в меня нормально;)
Ответы
Ответ 1
Вы используете указатели везде, поэтому вам нужно использовать → для ссылки на элементы.
т. biglist->someitem->itemType = MOVIE;
Ниже код компилируется с gcc -Wall -strict:
struct SomeItem
{
enum {MOVIE, MUSIC} itemType;
union {
struct Movie* movie;
struct Music* music;
} item;
};
struct Library{
struct SomeItem* someitem;
struct SomeItem* previousItem;
struct SomeItem* nextItem;
};
int main(void)
{
struct Library* biglist;
biglist->someitem->itemType = MOVIE;
return 0;
}
(Хотя этот код не будет работать, конечно, поскольку я не выделяю память для biglist и someitem!)
Ответ 2
biglist.someitem.itemType = MOVIE; /* or = MUSIC */
Или, если someitem
- указатель,
biglist.someitem->itemType = MOVIE; /* or = MUSIC */
Ответ 3
struct SomeItem
{
enum {MOVIE, MUSIC} itemType;
union {
struct Movie* movie;
struct Music* music;
} item;
struct SomeItem *next;
};
Ответ 4
Вы можете инициализировать перечисление таким образом biglist- > someitem = MOVIE; но компилятор присваивает целочисленные значения, начиная с 0. Итак:
biglist- > someitem = MOVIE возвращает 0 или
biglist- > someitem = MUSIC return 1
проверить, помогает ли она любому хорошему,