C: variable has initializer but incomplete type

41,248

Solution 1

Get rid of struct before item, you've typedef'd it.

Solution 2

typedef struct { ... } item creates an unnamed struct type, then typedefs it to the name item. So there is no struct item - just item and an unnamed struct type.

Either use struct item { ... }, or change all your struct item item1 = { ... }s to item item1 = { ... }. Which one you do depends on your preference.

Solution 3

The problem is that

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

does not declare the type name struct item, only item. If you want to be able to use both names use

typedef struct item { /* ... */ } item;
Share:
41,248
Matt
Author by

Matt

Updated on July 05, 2022

Comments

  • Matt
    Matt 6 months

    Trying to get my head around the old C language. Currently on structs and getting this error:

    "variable 'item1' has initializer but incomplete type"
    

    Here's my code:

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

    I guessed perhaps the struct defintion was in the wrong location so I moved it to the top of the file and recompiled, but I am still getting the same error. Where's my mistake?