如何在C中使用带有头文件的链表?

如何在C中使用带有头文件的链表?,c,linked-list,doubly-linked-list,C,Linked List,Doubly Linked List,我必须创建一个程序,用链表执行各种功能。我必须将函数保存在与main()不同的单独文件中,但是我不知道如何将列表包含在头文件中。 我尝试了不同的组合,现在linkedList.h文件中有: typedef struct list_elements* item; 这在linkedList.c中 typedef struct list_elements{ int value; struct list_elements *next; }item 问题是,当我试图编译main.c时,

我必须创建一个程序,用链表执行各种功能。我必须将函数保存在与main()不同的单独文件中,但是我不知道如何将列表包含在头文件中。 我尝试了不同的组合,现在linkedList.h文件中有:

typedef struct list_elements* item;
这在linkedList.c中

typedef struct list_elements{
    int value;
    struct list_elements *next;
}item
问题是,当我试图编译main.c时,我得到了这样一条消息:“请求非结构或联合中的成员‘value’”和“请求非结构或联合中的成员‘next’”

我查阅了推荐的教科书和在线资料,但找不到关于如何使用带有头文件的链表的解释


(当我在一个文件中测试整个过程时,这些函数可以工作,所以我认为它们不是问题所在)

您试图将同一标识符的类型定义为不同类型的两倍


删除第一个typedef
typedef struct list_elements*项
并将第二个放在头linkedList.h中,该头必须包含在linkedList.c中。

头中的声明将type
项定义为指向
结构列表元素的指针。
linkedList.c
中的声明声明了相同的名称,
item
,作为类型
struct list_元素
本身的别名。虽然这并非天生错误,但肯定会令人困惑。如果
linkedList.c
包含头文件,那么它就错了,通常这样做是合适的


您应该在头文件中进行所有类型声明,并将其包含在两个C源文件中,以确保它们共享这些声明。类型声明至少包括
typedef
s、
struct
union
声明以及函数原型。这不是您可能希望在标题中添加的内容的排他性列表。

有多种方法可以做到这一点:

其中一种方法是使用要在.h文件中使用的函数原型和单独的.c文件中的函数代码定义结构(当然,使用在.h文件中编写的相同原型),然后通过包含头文件,您可以在任何其他.c文件中使用该结构。e、 g:

StType.h

typedef struct Something{
    int a;
    int b;
}
typedef struct anotherSomething{
    int c;
    int d;
}

int fct1();
int fct2();
Fct.c

你的程序

include StType.h

int main()
{
    Something s;
    fct1();
}

我通常会这样做。

需要更多的代码,这些代码不足以找出问题所在。这没有意义。头文件在执行之前就包含在已编译程序中。您是说您正在执行后重新编译程序吗?您确定
typedef struct list\u elements项中的星号是否正确?您可能使用了
项目头;head.value=…
include StType.h

int main()
{
    Something s;
    fct1();
}