10

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?

3 Answers 3

22

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

Sign up to request clarification or add additional context in comments.

Comments

10

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.

Comments

6

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;

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.