在结构体中定义另一个结构体类型变量可以吗,该怎么处理

在结构体中定义另一个结构体类型变量可以吗
typedef struct List_2
{
  char Class_Name[Name_Maxsize];
  char Class_Term;
  char Class_Score;
  Stu_Score *next;
}Stu_Score;


typedef struct Tree_1
{
  int Room_ID;
  Stu_Room *lchild,*rchild;
}Stu_Room;


typedef struct List_1
{
  int Stu_ID;
  char Stu_Name[Name_Maxsize];
  Stu_Score *Stu_Score_List_P;
  Stu_Room *Stu_Room_Tree_P;
  Stu_Infomation *next;
}Stu_Infomation;

------解决方案--------------------
没问题啊~~
------解决方案--------------------
可以的,这样定义

另外一个结构体就变成了成员了
------解决方案--------------------
在结构体中定义另一个结构体类型变量

在结构体中定义指向另一个结构体类型的指针变量
不是一回事。
尽管两者都可以。
------解决方案--------------------
引用:
typedef struct List_Stu_Infomation
{
  int Stu_ID;
  char Stu_Name[Name_Maxsize];
  struct List_Stu_Infomation *next;
}Stu_Infomation;

可以编译

typedef struct List_Stu_Infomation//ѧÉúÐÅÏ¢±í½á¹¹
{
  int Stu_ID;
  char Stu_Name[Name_Maxsize];
  Stu_Infomation *next;
}Stu_Infomation;

编译报错

可见楼主没弄清楚这里的typedef是干什么的
typedef struct A
{
int x;
} B;
这段代码实际上是两个功能的组合
第一个功能:strcut A { int x; }定义一个名为struct A的结构体
第二个功能:typedef struct A B;声明struct A的另一个名称B
所以,楼主的代码中,直到B;这一行为止,typedef这条语句都尚未完成,此时编译器根本就不知道有一个叫B的东西
所以楼主在struct A这个结构体里面,只能使用struct A来指代本类型

容易混淆的是,在C++中,struct A直接定义一个名为A的结构体,不需要typedef

------解决方案--------------------
#define Name_Maxsize 10
typedef struct List_2
{
  char Class_Name[Name_Maxsize];
  char Class_Term;
  char Class_Score;
  struct List_2 *next;
} Stu_Score;

typedef struct Tree_1
{
  int Room_ID;
  struct Tree_1 *lchild,*rchild;
} Stu_Room;

typedef struct List_1
{
  int Stu_ID;
  char Stu_Name[Name_Maxsize];
  struct List_2 *Stu_Score_List_P;
  struct Tree_1 *Stu_Room_Tree_P;
  struct List_1 *next;
} Stu_Information;
int main() {
    Stu_Information si;

    si.Stu_ID=0;
    return 0;
}

------解决方案--------------------
引用:
Quote: 引用:

typedef struct List_Stu_Infomation
{
  int Stu_ID;
  char Stu_Name[Name_Maxsize];
  struct List_Stu_Infomation *next;
}Stu_Infomation;

可以编译

typedef struct List_Stu_Infomation//ѧÉúÐÅÏ¢±í½á¹¹
{
  int Stu_ID;
  char Stu_Name[Name_Maxsize];
  Stu_Infomation *next;
}Stu_Infomation;

编译报错

可见楼主没弄清楚这里的typedef是干什么的
typedef struct A
{
int x;
} B;
这段代码实际上是两个功能的组合
第一个功能:strcut A { int x; }定义一个名为struct A的结构体
第二个功能:typedef struct A B;声明struct A的另一个名称B
所以,楼主的代码中,直到B;这一行为止,typedef这条语句都尚未完成,此时编译器根本就不知道有一个叫B的东西
所以楼主在struct A这个结构体里面,只能使用struct A来指代本类型

容易混淆的是,在C++中,struct A直接定义一个名为A的结构体,不需要typedef
+1
------解决方案--------------------
感觉一个是全局的,一个是局部的(在结构体内定义的结构体,不能被外部调用定义新参数)在结构体中定义另一个结构体类型变量可以吗,该怎么处理