在GCC中使用结构并获得错误

时间:2011-09-23 05:36:28

标签: c gcc compilation struct

在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 个答案:

答案 0 :(得分:2)

有两种方法可以解决这个问题:

将第二行更改为:

struct details book1[10];

或者您可以将声明更改为:

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

C与C ++略有不同,因此您无法以完全相同的方式声明结构。

答案 1 :(得分:2)

details book1[10];

需要......

struct details book1[10];

答案 2 :(得分:1)

你需要像这样制作结构变量声明:

struct details book1[10];

这是因为details不是typedef,因此您不能像用户定义的类型那样使用它,因此您需要使用struct关键字。

请注意,在您的上述定义中,my_strstruct 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 1}}

答案 3 :(得分:0)

就C而言,这更为正确:

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


details book1[10];