2012-07-17 17 views
5

Estoy tratando de entender mi antiguo lenguaje C. Actualmente en estructuras y conseguir de este error:C: la variable tiene inicializador pero tipo incompleto

"variable 'item1' has initializer but incomplete type" 

Aquí está mi código:

typedef struct 
{ 
    int id; 
    char name[20]; 
    float rate; 
    int quantity; 
} item; 

void structsTest(void); 

int main() 
{ 
    structsTest(); 

    system("PAUSE"); 
    return 0; 
} 

void structsTest(void) 
{ 
    struct item item1 = { 1, "Item 1", 345.99, 3 }; 
    struct item item2 = { 2, "Item 2", 35.99, 12 }; 
    struct item item3 = { 3, "Item 3", 5.99, 7 }; 

    float total = (item1.quantity * item1.rate) + (item2.quantity * item2.rate) + (item3.quantity * item3.rate); 
    printf("%f", total); 
} 

supuse quizás el Defintion estructura estaba en el lugar equivocado por lo que se trasladó a la parte superior del archivo y volver a compilar, pero sigo recibiendo el mismo error. ¿Dónde está mi error?

Respuesta

16

Deshágase de struct antes de item, lo ha tipeado.

9

typedef struct { ... } item crea un tipo struct sin nombre, luego typedef s al nombre item. Entonces no hay struct item - solo item y un tipo sin nombre struct.

O usa struct item { ... }, o cambia todo tu struct item item1 = { ... } s por . Cuál de ellos depende de su preferencia.

4

El problema es que

typedef struct { /* ... */ } item; 

no declaran el nombre del tipo struct item, solamente item. Si desea poder utilizar ambos nombres, use

typedef struct item { /* ... */ } item; 
Cuestiones relacionadas