2013-07-14 1 views
0

У меня есть код C и использование компилятора GCC.Анонимный союз может содержать только нестатические члены данных GCC C++

Код имеет несколько вложенных типов внутри анонимного объединения:

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. 

Может кто-то дать дальнейшие объяснения, почему происходит эта ошибка?

+0

Вы получаете ошибку, потому что это не имеет никакого смысла. Из вашего вопроса неясно, чего вы ожидаете от этого, но если вы это добавите, кто-то может ответить, как вы можете это достичь. – hvd

+3

§ 9.5/5 - * Спецификация участника анонимного союза определяет только нестатические элементы данных. [Примечание. Вложенные типы и функции не могут быть объявлены в анонимном объединении . - end note] * – chris

+0

Вопросы непонятны, будьте точны. –

ответ

4

Ну, вам не разрешено объявлять вложенные типы внутри анонимных союзов. И это именно то, что вы сделали: вы объявили классы f и e внутри вашего анонимного союза. Это то, что компилятор не любит. Он говорит вам, что все, что вы можете сделать внутри анонимного объединения, объявляет нестатические члены данных. Вы не можете объявить там вложенные типы.

Непонятно, что вы пытаетесь здесь сделать, поэтому трудно предложить какие-либо дополнительные предложения.

4

Удалите определение для структуры внутри союза.

struct ab { 
    int a; 
    int b; 
    union { 
     int *c; 
     int *d; 
     struct { 
      int *c; 
      int *d; 
     }; 
     struct { 
      int *c; 
      int *d; 
     }; 
    }; 
}; 
Смежные вопросы