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

时间:2010-07-27 14:37:35

标签: c struct initialization enums declaration

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

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

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

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

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的新手,所以不要把我打得好;)

4 个答案:

答案 0 :(得分:13)

你到处都在使用指针,所以你需要使用 - >参考这些项目。

即。 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分配任何内存!)

答案 1 :(得分:4)

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

或者,如果someitem是指针,

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

检查它是否有益,