C - ошибка: размер хранилища "a" не известен - PullRequest
21 голосов
/ 10 января 2012

Это моя программа на C ...

#include <stdio.h>

struct xyx {
    int x;
    int y;
    char c;
    char str[20];
    int arr[2];
};

int main(void)
{
    struct xyz a;
    a.x = 100;
    printf("%d\n", a.x);
    return 0;
}

Это ошибка, которую я получаю ....

Нажмите клавишу ВВОД или введите команду для продолжения

13structtest.c: In function ‘main’:
13structtest.c:13:13: error: storage size of ‘a’ isn’t known
13structtest.c:13:13: warning: unused variable ‘a’ [-Wunused-variable]

Ответы [ 7 ]

23 голосов
/ 10 января 2012

Ваша структура называется struct xyx, но a имеет тип struct xyz. Как только вы исправите это, вывод будет 100.

#include <stdio.h>

struct xyx {
    int x;
    int y;
    char c;
    char str[20];
    int arr[2];
};

int main(void)
{
    struct xyx a;
    a.x = 100;
    printf("%d\n", a.x);
    return 0;
}
4 голосов
/ 10 января 2012

правильная опечатка

struct xyz a;

до

struct xyx a;

Лучше вы можете попробовать typedef, легко b

4 голосов
/ 10 января 2012

вы определяете структуру как xyx, но вы пытаетесь создать структуру с именем xyz.

4 голосов
/ 10 января 2012

Скажи это так: struct xyx a;

3 голосов
/ 16 февраля 2015

Для тех, у кого возникла эта проблема, это ошибка опечатки.Проверьте правильность написания структурных ошибок и структуру

3 голосов
/ 10 января 2012

Вы определяете свою структуру как xyx, однако в своей основной вы используете struct xyz a; , которая создает только предварительное объявление структуры с другим именем.

Попробуйте использовать xyx a; вместо этой строки.

2 голосов
/ 31 мая 2017

В этом случае пользователь допустил ошибку в определении и его использовании.Если кто-то сделал typedef для структуры, то следует использовать то же самое без использования struct, как в следующем примере.

typedef struct
{
   int a;
}studyT;

При использовании в функции

int main()
{
   struct studyT study; // This will give above error.
   studyT stud; // This will eliminate the above error.
   return 0;
}
...