2012-07-17 10 views
5

पुरानी सी भाषा के आसपास अपना सिर प्राप्त करने का प्रयास कर रहा है। वर्तमान में structs पर और इस त्रुटि हो रही है:सी: चर प्रारंभकर्ता है लेकिन अपूर्ण प्रकार

"variable 'item1' has initializer but incomplete type" 

यहाँ मेरी कोड है:

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

मैं अनुमान लगाया शायद struct defintion गलत स्थान में था तो मैं यह फ़ाइल और फिर कंपाइल के शीर्ष करने के लिए ले जाया गया, लेकिन मुझे अभी भी एक ही त्रुटि मिल रही है। मेरी गलती कहां है?

उत्तर

16

item से पहले struct से छुटकारा पाएं, आपने इसे टाइप किया है।

9

typedef struct { ... } item एक अनाम struct प्रकार बनाता है तो typedef नाम item के लिए यह है। तो struct item नहीं है - बस item और एक अज्ञात struct प्रकार है।

या तो struct item { ... } का उपयोग करें, या अपने सभी struct item item1 = { ... } से item item1 = { ... } पर बदलें। आप जो भी करते हैं वह आपकी वरीयता पर निर्भर करता है।

4

समस्या यह है कि

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

प्रकार का नाम struct item, केवल item की घोषणा नहीं करता है। आप का उपयोग करने में सक्षम होना चाहते हैं, तो दोनों के नाम का उपयोग

typedef struct item { /* ... */ } item; 
संबंधित मुद्दे