C编程:访问枚举值

时间:2013-08-03 14:44:40

标签: c struct enums

对于学校我必须写一个议程,它必须保存有关考试,任务和讲座的数据

我无法访问我的结构中的枚举。

我的结构如下:

struct Item{

enum {TASK, EXAM, LECTURE} entryType;

char* name;
char* course;

time_t start;
time_t end;

union
{
    struct Task* task;
    struct Exam* exam;
    struct Lecture* lecture;
} typeData;
};

现在我必须使用我的枚举来设置项目的类型。 该结构在Item.h中定义。 在包含Item.h的Item.c中,我使用以下代码:

struct Item* createItem(char* type){
struct Item* newItem;

newItem = (struct Item *) malloc (sizeof(struct Item));

if (strcmp(type, "Task") == 0)
{
    //newItem->entryType = newItem->TASK;
    newItem->typeData.task = createTask();
} else if (strcmp(type, "Exam") == 0)
{
    //newItem->entryType = newItem->EXAM;
    newItem->typeData.exam = createExam();
} else if (strcmp(type, "Lecture") == 0)
{
    //newItem->entryType = newItem->LECTURE;
    newItem->typeData.lecture = createLecture();
}

return newItem;
}

注释代码给出了错误(例如对于TASK):

错误C2039:'TASK':不是'Item'的成员

2 个答案:

答案 0 :(得分:2)

我的第一点是不必要的,其次是将createItem的参数更改为int,第三是你在dataType中使用指针,所以我们真的应该看到这些函数,第四个在你的结构中创建一个名为type的int字段。

   struct Item* createItem(int type){
   struct Item* newItem;

   newItem = malloc (sizeof(struct Item));    

  newItem->entryType = type;

   if (type == 0)
   {
     newItem->typeData.task = createTask();
   } else if (type == 1) 
   {
     newItem->typeData.exam = createExam();
   } else if (type == 2)
   {
     newItem->typeData.lecture = createLecture();
   }

 return newItem;
 }

答案 1 :(得分:2)

当你声明一个enum时,它的内容基本上就变成了编译时常量,就好像你有#define一样。特别是,如果您有enum { A, B, C } foo,则可以按{J} A访问选项,而不是foo->A