2009-12-20 7 views
1

Je rencontre des problèmes pour créer cette structure c dans l'objectif c.Utilisation de la bibliothèque c dans l'objectif 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; 

Je reçois cet avertissement à la fin du type union et la fin du type struct au-dessus de la « variable symbole unsigned char »

warning: declaration does not declare anything

Et puis quand je fais quelque chose comme ça :

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

Je reçois cette erreur de compilation:

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

Pourquoi cela ne fonctionne-t-il pas? Est-ce que je l'ai mis en place de manière incorrecte? Quelqu'un at-il déjà vécu cela?

Répondre

0

Vous devez inclure l'en-tête de la bibliothèque C que vous utilisez.

Vous ne devriez pas avoir à faire autre chose que cela, comme objectif C, contrairement à C++, est une stricte de C. surensemble

+1

Il n'y a rien dans l'extrait de code ou l'erreur suggérant un en-tête manquant. Tous les membres des 'struct's et' union's sont des types C intégrés. – dreamlax

2

Pour autant que je sais les syndicats anonymes ne font pas partie C, mais sont un extension du compilateur. Donc strictement votre définition de structure donnée n'est pas valide C. Par conséquent, il semble que l'objectif C ne supporte pas cette extension.

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; 

Selon le dialecte C/compilateur qui est utilisé pour interpréter le code, vous ne pouvez pas autorisés à déclarer une struct ou union sans nom. Essayez de leur donner des noms et voyez ce qui se passe. Vous pouvez également essayer de changer le dialecte C que vous utilisez.

+0

Vous avez tout à fait raison, le compilateur c pour iphone n'autorise pas les unions/structures anonymes. J'ai réparé ça et ça marche maintenant correctement! Merci de votre aide! – ilustreous

+10

Maintenant, allez, marquez-le comme la réponse. – dmkc

Questions connexes