[英]C header file/ source file - enum typedef
如果我的頭文件(.h)中有此聲明
typedef enum {START, END, STARTEMD, COMMENTS, DIRECTIVE} BalType;
typedef struct bal * Bal;
當我進入.c(源文件)時,我想創建我的struct bal並在其中包含屬性Baltype,以便以后可以告訴bal類型。 我已經定義了這樣的結構:
struct bal {
enum Baltype type;
char * name;
char * attrOne;
char * attrTwo;
};
但是我得到了錯誤:錯誤:字段類型的類型不完整。 我猜錯誤是在我的typedef枚舉上。
謝謝。
首先, typedef
創建一個“一流”類型,在使用它時,您不應再說它是枚舉。 正確的方法是:
typedef enum {A, B} C;
C c; // not enum C c.
其次,請考慮以下兩個部分:
typedef enum {A, B} C;
enum C D;
第一個創建未標記的枚舉,還為其創建類型別名C
第二個創建一個單獨的帶標記的枚舉(用C
標記),並且不創建類型別名(它也聲明了變量D
但這對我們在這里的考慮並不重要)。
現在您可能想知道與您的問題有什么關系,但是如果我們采用創建類型時使用的名稱,並在struct
下面使用您在struct
使用的名稱,我希望它會變得很明顯:
BalType
Baltype
^
An extra clue :-)
因此,問題的簡化與我上面給出的ABCD
代碼非常相似:
typedef enum {START, END} BalType;
enum Baltype type;
這實際上是這兩件事的組合 ,使您感到悲傷。 您似乎正在創建一個完整的枚舉類型,而且確實如此。 但是,您隨后創建了一個完全不同的 (並且不完整,因為它沒有主體)枚舉。 由於不完整,因此無法按您需要的方式使用。
要解決它,上面的最后一行(以及struct
的第一行)應替換為:
BalType type;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.