Установить typedef внутри структуры - PullRequest
1 голос
/ 20 января 2011

Я хочу сделать мой код более легким для чтения, поэтому я хочу заменить большой структурный набор чем-то более выразительным, но он не компилируется.

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};
}

Почему бы и неткомпилировать

Ответы [ 2 ]

3 голосов
/ 20 января 2011
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 }};
}
1 голос
/ 20 января 2011

Да, проблема, если я помню, заключается в том, что конструкция стиля {1,1,0} может использоваться только в качестве инициализатора, и вы (разумно) хотите присвоить ее переменной.

...