对于学校我必须写一个议程,它必须保存有关考试,任务和讲座的数据
我无法访问我的结构中的枚举。
我的结构如下:
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'的成员
答案 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
。