C 中的未知类型名称错误
Unknown type name error in C
我正在用 C 尝试一些基本的数据结构。很长一段时间后我又回到了 C。这是我的简单 struct
:
typedef struct
{
int data;
LLNode *next; //Error: unknown type name 'LLNode'
}LLNode;
但是编译报错如上图。是因为在编译 struct
时编译器不知道 LLNode
的存在吗?这意味着我必须在 struct
之前首先声明 LLNode
。是这样吗?如果是,我应该怎么做?
这样做:
typedef struct LLNode LLNode;
struct LLNode {
int data;
LLNode *next; //No error
};
您不能使用 LLNode
未定义的类型。
使用此方法,您首先声明 LLNode
是什么。即使尚未定义 struct LLNode
,此声明足以声明 LLNode *
成员(但您还不能声明 LLNode
成员),因为指针的大小不依赖于指针的类型。
结构的数据成员 next
被声明为未知类型 LLNode
。
更正后的例子
typedef struct LLNode
{
int data;
struct LLNode *next; //Error: unknown type name 'LLNode'
}LLNode;
请注意,结构标记名称和 typedef 名称位于不同的名称空间中。所以你可以同时使用这两个名字,比如 struct LLNode
和 LLNode
.
typedef
直到最后都不完整,因此 LLNode
不能用作 struct
中的类型名称。但是,struct
tag 可用,因此您可以这样做:
typedef struct LLNode
{
int data;
struct LLNode *next;
} LLNode;
这会生成一个 struct
,其结构与您的 post 中的结构相同,因为 struct LLNode
被 typedef
编辑为 LLNode
。
您可以使用:
typedef struct LLNode LLNode;
struct LLNode
{
int data;
LLNode *next;
};
我正在用 C 尝试一些基本的数据结构。很长一段时间后我又回到了 C。这是我的简单 struct
:
typedef struct
{
int data;
LLNode *next; //Error: unknown type name 'LLNode'
}LLNode;
但是编译报错如上图。是因为在编译 struct
时编译器不知道 LLNode
的存在吗?这意味着我必须在 struct
之前首先声明 LLNode
。是这样吗?如果是,我应该怎么做?
这样做:
typedef struct LLNode LLNode;
struct LLNode {
int data;
LLNode *next; //No error
};
您不能使用 LLNode
未定义的类型。
使用此方法,您首先声明 LLNode
是什么。即使尚未定义 struct LLNode
,此声明足以声明 LLNode *
成员(但您还不能声明 LLNode
成员),因为指针的大小不依赖于指针的类型。
结构的数据成员 next
被声明为未知类型 LLNode
。
更正后的例子
typedef struct LLNode
{
int data;
struct LLNode *next; //Error: unknown type name 'LLNode'
}LLNode;
请注意,结构标记名称和 typedef 名称位于不同的名称空间中。所以你可以同时使用这两个名字,比如 struct LLNode
和 LLNode
.
typedef
直到最后都不完整,因此 LLNode
不能用作 struct
中的类型名称。但是,struct
tag 可用,因此您可以这样做:
typedef struct LLNode
{
int data;
struct LLNode *next;
} LLNode;
这会生成一个 struct
,其结构与您的 post 中的结构相同,因为 struct LLNode
被 typedef
编辑为 LLNode
。
您可以使用:
typedef struct LLNode LLNode;
struct LLNode
{
int data;
LLNode *next;
};