typedef struct tagNode
{
char *pItem;
pNode pNext;
} *pNode;
新结构建立的过程中遇到了pNext域的声明,类型是pNode,要知道pNode表示的是类型的新名字,那么在类型本身还没有建立完成的时候,这个类型的新名字也还不存在,也就是说这个时候编译器根本不认识pNode。
解决这个问题的方法有多种:
1)、
typedef struct tagNode
{
char *pItem;
struct tagNode *pNext;
} *pNode;
2)、
typedef struct tagNode *pNode;
struct tagNode
{
char *pItem;
pNode pNext;
};
注意:在这个例子中,你用typedef给一个还未完全声明的类型起新名字。C语言编译器支持这种做法。
struct在代码中常见两种形式:
struct A
{
//...
};
struct
{
//...
} A;
这其实是两个完全不同的用法:
前者叫做“结构体类型定义”,意思是:定义{}中的结构为一个名称是“A”的结构体。
这种用法在typedef中一般是:
typedef struct tagA //故意给一个不同的名字,作为结构体的实名
{
//...
} A; //结构体的别名。
后者是结构体变量定义,意思是:以{}中的结构,定义一个名称为"A"的变量。这里的结构体称为匿名结构体,是无法被直接引用的。
也可以通过typedef为匿名结构体创建一个别名,从而使得它可以被引用:
typedef struct
{
//...
} A; //定义匿名结构体的别名为A
typedef struct {
int data;
int text;
} S1;
//这种方法可以在c或者c++中定义一个S1结构
struct S2 {
int data;
int text;
};
// 这种定义方式只能在C++中使用,而如果用在C中,那么编译器会报错,它定义的是结构体
struct {
int data;
int text;
} S3;
这种方法并没有定义一个结构,而是定义了一个s3的结构变量,编译器会为s3内存。
-------------------------------------------
1 首先:
在C中定义一个结构体类型要用
typedef struct Student
{
int a;
}Stu;
c++里很简单,直接
struct Student
{
int a;
};