C中的未知类型名称错误

时间:2016-03-25 09:31:56

标签: c struct structure declaration

我在C中尝试了一些基本的数据结构。很长一段时间后我都会回到C语言。这是我简单的struct

typedef struct
{
    int data;
    LLNode *next; //Error: unknown type name 'LLNode'
}LLNode;

但它给出了如上所示的编译错误。是因为编译struct编译器时不知道LLNode的存在吗?这意味着我必须首先在LLNode之前声明struct。是这样的吗?如果是的话我该怎么做呢?

4 个答案:

答案 0 :(得分:6)

结构的数据成员next被声明为LLNode类型,这是未知的。

更正后的例子

typedef struct LLNode
{
    int data;
    struct LLNode *next; //Error: unknown type name 'LLNode'
}LLNode;

考虑结构标记名称和typedef名称位于不同的名称空间中。因此,您可以同时使用这两个名称,例如struct LLNodeLLNode

答案 1 :(得分:5)

这样做:

typedef struct LLNode LLNode;

struct LLNode {
    int data;
    LLNode *next; //No error
};

在定义之前,您不能使用LLNode类型。 使用此方法,您首先声明LLNode是什么。即使struct LLNode尚未定义,此声明也足以声明LLNode *成员(但您无法声明LLNode成员)因为指针的大小不依赖于指针的类型。

答案 2 :(得分:2)

typedef在结束前不完整,因此LLNodestruct内不可用作类型名称。但是,struct 标记可用,因此您可以执行此操作:

typedef struct LLNode
{
    int data;
    struct LLNode *next;
} LLNode;

这会产生struct,其结构与帖子中的内容相同,因为struct LLNodetypedef - 编辑为LLNode

答案 3 :(得分:0)

你可以使用:

typedef struct LLNode LLNode;
struct LLNode
{
int data;  
LLNode *next;   
};