繁体   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