10

试图让我的头脑了解旧的 C 语言。目前在结构上并收到此错误:

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

我猜可能结构定义在错误的位置,所以我将它移到文件的顶部并重新编译,但我仍然得到同样的错误。我的错在哪里?

4

3 回答 3

19

摆脱struct之前item,你已经 typedef 了它。

于 2012-07-17T02:35:56.527 回答
10

typedef struct { ... } item创建一个未命名的struct类型,然后typedef将其传递给 name item。所以没有struct item- 只是item和一个未命名的struct类型。

要么使用struct item { ... },要么将所有struct item item1 = { ... }s 更改为item item1 = { ... }. 你做哪一个取决于你的喜好。

于 2012-07-17T02:36:07.660 回答
6

问题是

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

不声明类型名称struct item,仅item。如果您希望能够同时使用这两个名称,请使用

typedef struct item { /* ... */ } item;
于 2012-07-17T02:43:50.163 回答