2011-01-20 1 views
1

Je veux rendre mon code plus facile à lire, donc je veux remplacer un grand ensemble de structures, par quelque chose de plus expressif, mais il ne compile pas.Définir typedef à l'intérieur d'une structure

typedef float vec_t; 
typedef vec_t vec3_t[3]; 

typedef struct{ 
     int x; 
     vec3_t point; 
} structure1; 

//This Works just fine and is what i want to avoid 
structure1 structarray[] = { 
       1, 
       {1,1,1} 
}; 

//This is what i want to do but dont work 
//error: expected '=', ',', ';', 'asm' or '__attribute__' before '.' token 
structarray[0].x = 1; 
structarray[0].point = {0,0,0}; 

int main() 
{ 
     //This is acceptable and works 
     structarray[0].x = 1; 


     //but this dont work 
     //GCC error: expected expression before '{' token 
     structarray[0].point = {1,1,1}; 
} 

Pourquoi ne compile-t-il pas?

+0

Rafe, Merci d'avoir corrigé les erreurs de sorts, essayez de ne pas refaire la même erreur. – banana

Répondre

3
structure1 structarray[] = { 
    [0].x = 1, 
    [0].point = { 0, 0, 0 }, 
}; 

// you can also use "compound literals" ... 

structure1 f(void) { 
    return (structure1) { 1, { 2, 3, 4 }}; 
} 
+0

Merci qui fera le boulot: D – banana

+0

L'homme, c'est une de ces constructions qui en dépit du fait que c'est raisonnablement clair, fait que ma peau rampe. –

+0

Pour l'enregistrement, il s'agit d'une fonctionnalité appelée * initializers *. Il est valide C99 mais pas valide C89 (aka C90 ou ANSI C), donc il ne fonctionnera pas sur les plates-formes qui n'ont pas de compilateur C99 disponible. –

1

Oui, le problème, si je me souviens est que la {1,1,0} construction de style ne peut être utilisé comme un initialiseur, et vous (raisonnablement) veulent assigner à une variable.

+0

Merci pour l'explication. – banana

Questions connexes