我发现在结构中定义枚举有一些问题,我希望有类似的东西:
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 但我确实定义了该类型的成员。
答案 0 :(得分:3)
您应该声明您的enum
成员:
typedef struct
{
enum { E1, E2, E3 } e;
} S;
然后你可以这样做:
int main(void)
{
S s;
s.e = E1;
/* And so on */
}