Следующий код должен использоваться в основной функции, но я не знаю, как это используется.
struct SomeItem
{
enum {MOVIE, MUSIC} itemType;
union {
struct Movie* movie;
struct Music* music;
};
};
эта структура используется в динамическом связанном списке с предыдущим/объектом/прямым указателем, но я не знаю, как можно установить перечисление. Или как инициализировать его.
Я должен знать, как это было бы похоже в основной функции.
biglist.someitem = ???;
/* declaration I use */
struct Library* biglist;
больше кода для понимания то, что я пытаюсь сделать.
struct Library{
struct SomeItem* someitem;
struct SomeItem* previousItem;
struct SomeItem* nextItem;
};
ошибки компилятора: C2037: оставленный 'someitem' указывает неопределенную структуру/объединение 'библиотека' C2065: ФИЛЬМ: необъявленный идентификатор
Я - все еще новобранец на ANSI C, не стреляйте в меня хорошо ;)
Вы используете указатели везде, поэтому вам нужно использовать -> для ссылки на элементы.
т.е. 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.itemType = MOVIE; /* or = MUSIC */
Или, если someitem
является указателем,
biglist.someitem->itemType = MOVIE; /* or = MUSIC */
Вы можете инициализировать перечисление таким образом: biglist-> someitem = MOVIE; но компилятор присваивает целочисленные значения, начиная с 0. Итак: biglist-> someitem = MOVIE возвращает 0 или biglist-> someitem = MUSIC return 1
проверьте, помогает ли это,
struct SomeItem
{
enum {MOVIE, MUSIC} itemType;
union {
struct Movie* movie;
struct Music* music;
} item;
struct SomeItem *next;
};