2013-11-15 143 views
0

我定義這個結構分配不兼容的變量類型?

typedef struct UNIAO_NOME 
{ 
    int vert; 
    struct un *Pai; 
} un; 

但是,那麼,當我嘗試

int name (un *conj/*pointer to a subset*/) 
{ 
    un c;/*subset*/ 
    c = *conj; 
    while (c.Pai != NULL) 
     c = *(c.Pai); 
    return c.vert; 
} 

編輯說,

c = *(c.Pai); 

是錯誤的,但c是類型聯合國。

在此先感謝。

回答

2

您有struct內部的兩個不同類型的—,你宣佈了一種新型un。寫這樣的:

typedef struct UNIAO_NOME 
{ 
    int vert; 
    struct UNIAO_NOME *Pai; // refers to this type 
} un; 
+0

對不起,但我不明白。你的意思是我應該寫下「un * Pai」或「struct UNIAO_NOME * Pai」? – user1286390

1

你從來沒有定義struct un而只是引用類型struct UNIAO_NOME的標識符un(不struct)。

使用struct un*實際上是一個隱含的「前向聲明」struct un。對於編譯器來說,這足以推導出指向這樣一個尚未定義的結構的指針有多大。

可用於此類各種頭痛的一個成語是typedef所有結構他們的完整聲明:

typedef struct un un; 

向前月^^^^^^^^^^^
鍵入別名------------------ ^^

struct un 
{ 
    int vert; 
    un *Pai; 
}; 
+0

@ user1286390,同樣,所有大小寫標識符通常用於宏。這不是編譯器強制執行的規則,但它會傷害大多數有經驗的C程序員的眼睛。 –

相關問題