结构中的c enum定义,带有typedef

时间:2014-11-26 20:45:15

标签: c struct enums typedef

我发现在结构中定义枚举有一些问题,我希望有类似的东西:

typedef struct
{
    typedef enum { E1, E2, E3 } E;
    E e;
} S;
VS2012中的

我有错误:

error C2071: 'E' : illegal storage class
error C2061: syntax error : identifier 'E'
error C2059: syntax error : '}'

我找到了对C2071的解释,但情况并非如此: http://msdn.microsoft.com/en-us/library/deb3kh5w.aspx

gcc-4.9说:

error: expected specifier-qualifier-list before ‘typedef’
有趣的是代码:

typedef enum { E1, E2, E3 } E;
E e;

在全球范围和功能方面都很好。

我还试图在没有typedef的情况下做到这一点,但遗憾的是还有很多错误:

error C2011: 'E' : 'enum' type redefinition
see declaration of 'E'
error C2208: 'E' : no members defined using this type

我发现了类似的原因:http://msdn.microsoft.com/en-us/library/ms927163.aspx 但我确实定义了该类型的成员。

1 个答案:

答案 0 :(得分:3)

您应该声明您的enum成员:

typedef struct
{
    enum { E1, E2, E3 } e;
} S;

然后你可以这样做:

int main(void)
{
    S s;
    s.e = E1;

    /*  And so on  */
}