использование структур в GCC и получение ошибок - PullRequest
0 голосов
/ 23 сентября 2011

Тот же код работал в TURBO C.

    struct details
    {
      char name[20];
      int year;
      float price;
    }my_str;

    details book1[10];

Произошла эта ошибка. Как это можно исправить?

ram.c: In function ‘main’:
ram.c:11:1: error: ‘details’ undeclared (first use in this function)
ram.c:11:1: note: each undeclared identifier is reported only once for each function it appears in

Ответы [ 4 ]

2 голосов
/ 23 сентября 2011
details book1[10];

должно быть ...

struct details book1[10];
2 голосов
/ 23 сентября 2011

Существует два способа исправить это:

Изменить вторую строку на это:

struct details book1[10];

Или вы можете изменить объявление на:

typedef struct{
    char name[20];
    int year;
    float price;
} details;

Cнемного отличается от C ++, поэтому вы не можете объявлять структуры совершенно одинаково.

1 голос
/ 23 сентября 2011

Вам нужно сделать объявление структурной переменной следующим образом:

struct details book1[10];

Это потому, что details не typedef ed, и поэтому вы не можете использовать его как пользовательский тип, и поэтому вам нужно использовать ключевое слово struct.

Обратите внимание, что в приведенном выше определении my_str является переменной (выделенным объектом) типа struct details

Вы также можете сделать:

typedef struct details
{
  char name[20];
  int year;
  float price;
} my_str;

А затем сделайте:

my_str book1[10];

Это то же самое, что и выше. Обратите внимание, что my_str - это не переменная (объект), а имя типа, которое вы определили с помощью ключевого слова typedef. После этого компилятор узнает, что вы используете my_str в качестве нового пользовательского имени типа для созданного вами типа данных составной структуры, и поэтому вы можете использовать my_str напрямую вместо struct details

0 голосов
/ 23 сентября 2011

Это немного более правильно с точки зрения C:

typedef struct _detailstype
{
  char name[20];
  int year;
  float price;
} details;


details book1[10];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...