C 我无法键入指向已键入的结构的指针

C 我无法键入指向已键入的结构的指针,c,data-structures,struct,linked-list,typedef,C,Data Structures,Struct,Linked List,Typedef,我对这些声明有点困惑。我想为我的程序制作一个链表,但由于某种原因,当我试图编译它时,它总是出错。基本上,这将是我的主节点模型,在它之后还有另一个结构(没有TYPEDEF)用于我的列表。它编译得很好。我不知道怎么了 我已经尝试将typedef放在struct student上 typedef struct { char name[50]; int id; node next; }student; typedef student* node; typedef struc

我对这些声明有点困惑。我想为我的程序制作一个链表,但由于某种原因,当我试图编译它时,它总是出错。基本上,这将是我的主节点模型,在它之后还有另一个结构(没有TYPEDEF)用于我的列表。它编译得很好。我不知道怎么了

我已经尝试将typedef放在struct student上

typedef struct
{
    char name[50];
    int id;
    node next;

}student;

typedef student* node;

typedef struct listR* list;

struct listR
{
    node head,tail;
    int size;

};
错误: 未知类型名称“节点” 警告:
初始化从不带强制转换的整数生成指针编译器不知道节点是什么,因为创建结构后创建了节点类型

您可以执行以下任一操作:

typedef struct node node;

struct node
{
  char name[50];
  int id;
  node* next;
};
要告诉编译器节点是什么

我会用这个:

struct Node
{
  struct Node *next;
  struct Node *prev;
};

但是,我碰巧是那些没有充分理由不喜欢typedeffing结构的人之一。请在此处阅读更多信息:

在哪一行报告“未知类型名称
节点”
?可能是
student
中的那一行在定义之前使用了
node
?注意listR和student之间的区别,在struct listR上,第14行中没有任何错误,下一个是node是!你的两种方法在某种程度上解决了这个问题!但我也这样做并工作了:typedef struct student*节点;typedef struct student{char name[50];int id;node next;}我的解决方案是通用的。很高兴这有帮助。您的上一个解决方案(在上面的注释中)之所以有效,是因为您对您的结构进行了原型化,如第一个示例中所示。
struct Node
{
  struct Node *next;
  struct Node *prev;
};