2017-01-28 67 views
2

在下面的表示中,Ç - 字段具有不完整的類型

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-定義一個結構對象本身) – BLUEPIXY

+1

你有一個遞歸的'結構'定義。 –

回答

4

此錯誤表示您嘗試將成員添加到尚未完全定義的類型的struct,因此編譯器無法知道其大小以確定對象佈局。

在您的特殊情況下,您嘗試讓struct Cat將其自身的一個完整對象作爲成員(mother字段)。類型定義中的那種無限遞歸當然是不可能的。

儘管如此,結構可以包含指向其他自身實例的指針。所以,如果你改變你的定義如下,這將是一個有效的strcut

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

這樣就意味着'struct貓兒童[10]'也不會被允許。什麼是類型定義中的遞歸? – user1787812

+0

@ user1787812 - 正確。但是'struct Cat * children [10]'(不是'*')是允許的。 *指針數組*完全可以。 – StoryTeller

+0

@ user1787812 - 遞歸在包含**的類型中完全**作爲成員。 – StoryTeller

相關問題