2017-01-28 2 views
2

В следующем представлении,C - поле имеет неполную тип

struct Cat{ 
    char *name; 
    struct Cat mother; 
    struct Cat *children; 
}; 

Компилятор дает ниже ошибки для второго поля, но не третье поле,

error: field ‘mother’ has incomplete type 
    struct Cat mother; 
      ^

Как понять эта ошибка?

+1

[Проблема в определении объекта структуры внутри себя] (http://stackoverflow.com/questions/5329570/problem-in- define-object-of-a-structure-inside-yourself) – BLUEPIXY

+1

У вас есть рекурсивное определение 'struct'. –

ответ

4

Ошибка означает, что вы пытаетесь добавить элемент в struct определенного еще не определенного типа, поэтому компилятор не может знать его размер, чтобы определить макет объектов.

В вашем конкретном случае вы пытаетесь и имеете struct Cat держите полный объект в качестве члена (поле mother). Такая бесконечная рекурсия в определении типа, конечно, невозможна.

Тем не менее, структуры могут содержать указатели на другие экземпляры самих себя. Так что если вы измените свое определение следующим образом, это будет действительный strcut:

struct Cat{ 
    char *name; 
    struct Cat *mother; 
    struct Cat *children; 
}; 
+0

, так что это означает, что 'struct Cat children [10]' также не будет разрешено. Что такое рекурсивное определение типа здесь? – user1787812

+0

@ user1787812 - Правильно. Тем не менее допускается использование 'struct Cat * children [10]' (а не '*'). Массив * указателей * отлично подходит. – StoryTeller

+0

@ user1787812 - Рекурсия находится в типе, содержащем себя ** полностью ** как член. – StoryTeller

Смежные вопросы