如何在ANSI C中的结构中使用枚举?

以下代码必须在main-function中使用,但我不知道它是如何使用的。

struct SomeItem { enum {MOVIE, MUSIC} itemType; union { struct Movie* movie; struct Music* music; }; }; 

这个结构用在带有previous / item / next指针的动态链表中,但我不知道如何设置枚举。 或者如何初始化它。

我需要知道它在main函数中的样子。

 biglist.someitem = ???; /* declaration I use */ struct Library* biglist; 

更多代码,以了解我想做什么。

 struct Library{ struct SomeItem* someitem; struct SomeItem* previousItem; struct SomeItem* nextItem; }; 

编译器错误:C2037:’someitem’左侧指定未定义的struct / union’library’C2065:MOVIE:未声明的标识符

我仍然是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分配任何内存!)

 biglist.someitem.itemType = MOVIE; /* or = MUSIC */ 

或者,如果someitem是一个指针,

 biglist.someitem->itemType = MOVIE; /* or = MUSIC */ 

你可以用这样的方式初始化枚举biglist-> someitem = MOVIE; 但是编译器从0开始分配整数值。所以:biglist-> someitem = MOVIE返回0或biglist-> someitem = MUSIC返回1

检查它是否对任何好处有帮助,

 struct SomeItem { enum {MOVIE, MUSIC} itemType; union { struct Movie* movie; struct Music* music; } item; struct SomeItem *next; };