2014-11-26 2 views
0

Я нашел некоторые проблемы с определением перечисления внутри структуры, я хочу иметь что-то вроде:C определение перечисления в структурах с ЬурейиМи

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 : '}' 

I нашел объяснение C2071, но это не тот же случай: http://msdn.microsoft.com/en-us/library/deb3kh5w.aspx

НКУ-4,9 говорит:

error: expected specifier-qualifier-list before ‘typedef’ 

самое интересное заключается в том, что код:

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

отлично работает в глобальном масштабе и в теле функции.

Я также попытался сделать это без ЬурейеГо, но, к сожалению, есть еще много о ошибках:

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

Любое использование 'typedef' в объявлении структуры является синтаксической ошибкой. Что вы ожидаете от этого кода? Если вы хотите, чтобы 'typedef' отображался только внутри объявления структуры (что в действительности не очень полезно): объявления структуры не вводят новую область (и если бы они это сделали, то константы перечисления были бы недоступны из-за пределов структуры) , – mafso

ответ

3

Вы должны объявить enum элемент следующим образом:

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

, то вы можете сделать:

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

    /* And so on */ 
} 
Смежные вопросы