2009-12-20 135 views
1

我無法在目標c中創建此c結構。在目標c中使用c庫

typedef struct huffman_node_tag 
{ 
    unsigned char isLeaf; 
    unsigned long count; 
    struct huffman_node_tag *parent; 

    union 
    { 
     struct 
     { 
      struct huffman_node_tag *zero, *one; 
     }; 
     unsigned char symbol; 
    }; 
} huffman_node; 

我得到在聯盟類型的結束這個警告和結構類型的「無符號的字符符號變量」

warning: declaration does not declare anything

然後上面月底的時候我做這樣的事:

huffman_node *p = (huffman_node*)malloc(sizeof(huffman_node)); 
p->zero = zero; 

我得到這個編譯錯誤:

error: 'huffman_node' has no member named 'zero'

爲什麼這不起作用?我錯誤地設置了這個嗎?有誰之前經歷過這個嗎?

回答

0

您需要包含您正在使用的C庫的頭文件。

你不應該做太多別的比,作爲目標C,不像C++,是C.

+1

代碼片段中沒有任何內容或錯誤提示缺少標題。 'struct'和'union'的所有成員都是內置的C類型。 – dreamlax 2009-12-20 20:20:23

2

嚴格的超集,據我知道匿名工會是不是C的一部分,但一個編譯器擴展。所以嚴格地說,你給定的結構定義是無效的C.因此,看起來目標C不支持這個擴展。

15

typedef struct huffman_node_tag 
{ 
    unsigned char isLeaf; 
    unsigned long count; 
    struct huffman_node_tag *parent; 

    union 
    { 
     struct 
     { 
      struct huffman_node_tag *zero, *one; 
     }; // problematic here! 
     unsigned char symbol; 
    }; // another problem here! 
} huffman_node; 

根據的C語言/正被用來解釋代碼的編譯器,你可能不會被允許申報一個structunion沒有名字。嘗試給他們的名字,看看會發生什麼。或者,您可能想嘗試更改您使用的C方言。

+0

你完全正確,iPhone的c編譯器不允許匿名聯合/結構。我修好了,它現在正常工作!感謝您的幫助! – ilustreous 2009-12-20 23:45:06

+10

現在,來吧,將其標記爲答案。 – dmkc 2010-07-12 04:37:29