2015-04-01 362 views
0

如果我在头文件中得到了这个声明(.H)C头文件/源文件 - 枚举类型定义

typedef enum {START, END, STARTEMD, COMMENTS, DIRECTIVE} BalType; 
typedef struct bal * Bal; 

我来的时候,我.C(源文件),我想创建我的结构bal并在其中包含一个属性Baltype,以便我可以稍后告诉bal的类型。我已经定义了我的结构像这样:

struct bal { 
    enum Baltype type; 
    char * name; 
    char * attrOne; 
    char * attrTwo; 
}; 

但我得到的错误:错误:字段类型有不完整的类型。我想错误是在我的typedef枚举。

谢谢你。

+0

我已经包括bal.h我bal.c文件 – Thapipo 2015-04-01 02:35:25

回答

3

首先,typedef创建一个“第一类”类型,在使用它时不应该说它是枚举。正确的方法是沿着线:

typedef enum {A, B} C; 
C c;     // not enum C c. 

其次,考虑以下两个部分:

typedef enum {A, B} C; 
enum C D; 

第一创建未标记枚举,并且还创建了一个类型别名C为它。第二个创建一个单独的标记枚举(标记为C)并创建没有类型别名(它也声明变量D,但这对我们的考虑不重要)。

现在你可能想知道什么是与你的问题做的,但如果我们把您在创建类型时使用的名称,地点在它下面你struct中使用的名字,我希望它会变得明显:

BalType 
Baltype 
^
    An extra clue :-) 

所以你的问题的简化是从而显着类似ABCD代码我上面给:

typedef enum {START, END} BalType; 
enum Baltype type; 

这其实是组合这两件事情给你的悲伤。你似乎要创建一个完整的枚举类型,你是。但是,您然后创建一个完全不同的(并且不完整,因为它没有主体)枚举。不完整,不能以您需要的方式使用。

BalType type; 
+0

非常感谢:

为了解决这个问题,上面的最后一行(和你struct中的第一个)应改为!这很有帮助。 – Thapipo 2015-04-01 12:41:57