2009-12-20 2 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, которую вы используете.

Вы не должны делать больше, чем то, что, как Objective C, в отличие от C++, является надстройкой С.

+1

В фрагменте кода отсутствует ошибка, указывающая на отсутствие заголовка. Все члены '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' – dreamlax

2

Насколько я знаю, анонимные союзы не являются частью 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/диалекта компилятора, который используется для интерпретации кода, не может быть разрешено объявить struct или union без имени. Попробуйте дать им имена и посмотреть, что произойдет. Кроме того, вы можете попробовать изменить диалект С, который вы используете.

+0

Вы совершенно правы, компилятор c для iphone не разрешает анонимные союзы/структуры. Я исправил это, и теперь он работает правильно! спасибо за помощь! – ilustreous

+10

Теперь, давай, отметьте это как ответ. – dmkc

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