0

我有一些 C 代码并使用 GCC 编译器。

该代码在匿名联合中有一些嵌套类型:

struct ab {
    int a;
    int b;
    union {
        int *c;
        int *d;
        struct f {
           int *c;
           int *d;
        };
        struct e {
            int *c;
            int *d;
        };
    };
};

我收到此错误:

Error: 'struct ab::<anonymous union>::f' invalid; an anonymous union 
can only have non-static data members.

有人可以进一步解释为什么会发生此错误吗?

4

3 回答 3

5

好吧,你不能在匿名联合中声明嵌套类型。这正是你所做的:你声明了类fe在你的匿名联合中。这是编译器不喜欢的。它告诉您,您在匿名联合中所能做的就是声明非静态数据成员。您不能在那里声明嵌套类型。

目前尚不清楚您要在这里做什么,因此很难提供任何进一步的建议。

于 2013-07-14T07:24:58.010 回答
4

删除联合中 struct 的定义。

struct ab {
    int a;
    int b;
    union {
        int *c;
        int *d;
        struct  {
           int *c;
           int *d;
        };
        struct {
            int *c;
            int *d;
        };
    };
};
于 2014-02-15T06:41:51.793 回答
0

当引用联合成员时,它就像一个结构成员。您为编译器创建了一个模棱两可的情况。

以下是有关 GCC 规范的更多信息:http: //gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html#Unnamed-Fields

如何使用匿名结构/联合编译 C 代码?

于 2013-07-14T07:37:36.197 回答