错误C2016(C要求结构或联合至少有一个成员)和结构typedef

时间:2015-06-08 08:53:40

标签: c struct include project-structure

在我的C项目中有一些实体。对于每个实体,都有头文件和源文件。在头文件中,我定义了几个结构。

例如,我们说我们的实体是Baz。然后我们有baz.hbaz.c。在baz.h里面会有类似的内容:

typedef struct baz_t {
    int i; 
    char c;
} Baz;

typedef struct bazbaz_t {
    Baz *b;
} BazBaz;

以同样的方式,我可以定义一个实体Foo,它的结构包含指向另一个结构的指针。类似的东西:

typedef struct foo_t {
    Baz *b; 
} Foo;

总而言之,每个实体都可以有多个结构,一个结构可以有一个指向同一个实体中另一个结构的指针,或者一个指向另一个实体的结构的指针。

最后,那些结构(显然)应该被项目中的其他文件使用。

我创建了main.h\ main.c #include所有实体,每个实体都有main.h的包含。我还添加了包含警戒以避免循环依赖。

问题是:
我得到了所有C2016错误;我已尝试将typedef移至main.h,但问题尚未解决。

我该如何解决这个问题?我更确定那里有一个正确的范例来处理这种情况,但我对C来说相对较新。

1 个答案:

答案 0 :(得分:1)

您在此处使用新创建的类型名Baz作为名称:

 Baz *Baz; 

它与做的一样:

int int;

这也是非法的,因为“Ï”是一个类型名称。 如果您将其更改为:

Baz *baz; 

它应该有用。