Использование библиотеки c в цели c - PullRequest
1 голос
/ 20 декабря 2009

У меня проблемы с созданием этой структуры 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;

Я получаю это предупреждение в конце типа объединения и в конце типа структуры над "переменной символа без знака"

предупреждение: объявление ничего не объявляет

А потом, когда я делаю что-то вроде этого:

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

Я получаю эту ошибку компиляции:

ошибка: у 'huffman_node' нет члена с именем 'ноль'

Почему это не работает? Я настроил это неправильно? Кто-нибудь испытывал это раньше?

Ответы [ 3 ]

15 голосов
/ 20 декабря 2009

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 без имени. Попробуйте дать им имена и посмотреть, что произойдет. Кроме того, вы можете попробовать изменить диалект C, который вы используете.

2 голосов
/ 20 декабря 2009

Насколько я знаю, анонимные объединения не являются частью C, но являются расширением компилятора. Строго говоря, данное вами определение структуры недопустимо. Следовательно, кажется, что цель C не поддерживает это расширение.

0 голосов
/ 20 декабря 2009

Вы должны включить заголовок для библиотеки C, которую вы используете.

Вам не нужно делать ничего другого, поскольку Objective C, в отличие от C ++, является строгим надмножеством C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...