2011-04-11 3 views
3

Je dispose d'un fichier d'en-tête comprenant une structure comme celle-ci:ne peut pas affecter la variable struct dans le fichier d'en-tête

typedef struct 
{ 
    int index = -1; 
    stack_node *head; 
} stack; 

Mais lors de la compilation avec cc, il indique l'erreur à la ligne d'affectation (int index = -1):

error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token 

Devrais-je ajouter une fonction d'initialisation pour initialiser les variables?

Répondre

1

En C, vous ne pouvez pas affecter de variables dans la structure. Vous devez les initialiser dans une autre fonction lors de la création de chaque instance, par contre, vous devez les initialiser dans une autre fonction.

4
typedef struct 
{ 
    int index; 
    stack_node *head; 
} stack; 

stack getStack() 
{ 
    stack st; 
    st.index = -1; 
    return st; 
} 
5

Ce que vous fournissez n'est pas une déclaration de variable, mais une définition de type. Vous ne pouvez pas affecter des valeurs par défaut aux champs struct dans un typedef.

Si vous souhaitez affecter une valeur initiale à une variable struct, vous devriez essayer:

stack myStack = { .index = 1 }; 

Cela fonctionne en C99.

1

Vous ne pouvez pas affecter une valeur dans la déclaration de struct comme cela.

stack s = { -1, 0 }; 

Essayez ceci.

Techniquement, si vous utilisez C++, vous pouvez définir un constructeur pour struct. Je ne pense pas que ce travail pour C. Utilisez ce qui précède si vous êtes strictement dans un environnement C.

typedef struct _stack 
{ 
    int index = -1; 
    stack_node *head; 
    _stack() { 
     index = -1; 
     head = 0; 
    } 
} stack; 

Quelque chose comme ça. Faites-moi savoir si cela ne fonctionne pas parce que j'écris sur un peu de mémoire et que je n'ai pas écrit beaucoup de C pendant un bon moment.

MISE À JOUR: J'aime la réponse @mouviciel, je ne savais pas que vous pouviez initialiser une variable membre individuelle en préfixant. devant. J'ai appris quelque chose. Merci.

Questions connexes