簡體   English   中英

C頭文件/源文件-枚舉typedef

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM