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

Я догадался, что определение структуры было в неправильном месте, поэтому я переместил его в начало файла и перекомпилировал, но я все еще получаю ту же ошибку. Где моя ошибка?

6 голосов | спросил Matt 17 J000000Tuesday12 2012, 06:33:02

3 ответа


0

Избавьтесь от struct перед item, вы напечатали это.

ответил Keith Nicholas 17 J000000Tuesday12 2012, 06:35:56
0

typedef struct { ... } item создает безымянный struct введите, а затем typedef присвойте ему имя item. Так что struct item нет - просто item и безымянный тип struct.

Либо используйте struct item { ... }, либо измените все свои struct item item1 = { ... } с item item1 = { ... }. То, что вы делаете, зависит от ваших предпочтений.

ответил Chris Lutz 17 J000000Tuesday12 2012, 06:36:07
0

Проблема в том, что

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

не объявляет имя типа struct item, только item. Если вы хотите использовать оба имени, используйте

typedef struct item { /* ... */ } item;
ответил Geoff Reedy 17 J000000Tuesday12 2012, 06:43:50

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132