2015-04-01 62 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