1

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

我在访问结构中的枚举时遇到问题。

我的结构如下所示:

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:“任务”:不是“项目”的成员

4

2 回答 2

3

当您声明 anenum时,它的内容本质上成为编译时常量,就好像您拥有#define它们一样。特别是,如果您有enum { A, B, C } foo,您可以通过 访问选项A,而不是foo->A您想象的那样。

于 2013-08-03T15:06:04.957 回答
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;
 }
于 2013-08-03T15:04:53.553 回答