2009-12-20 88 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