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

structbeforeを取り除きitemます。typedef しました。

于 2012-07-17T02:35:56.527 に答える
10

typedef struct { ... } itemstruct名前のない型を作成し、typedefそれを name にしitemます。したがって、名前のないタイプはstruct itemありません。itemstruct

を使用するか、すべての を にstruct item { ... }変更します。どちらを行うかは、好みによって異なります。struct item item1 = { ... }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 に答える