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

我必须创建一个程序,使用链表执行各种function。 我必须将函数保存在与main()不同的文件中,但是我无法弄清楚如何将列表包含在头文件中。 我尝试了不同的组合,现在我在linkedList.h文件中有这个:

typedef struct list_elements* item; 

这在linkedList.c中

 typedef struct list_elements{ int value; struct list_elements *next; }item 

问题是,当我尝试编译main.c时,我收到消息:“请求成员’值’不是结构或联合”和“请求成员’下一个’不是结构或联合”。

我看了建议的教科书和在线,但我找不到如何使用链接列表与头文件的解释?

(当我在一个文件中测试整个东西时,这些function起作用,所以我不认为它们是问题所在);

您尝试键入相同的标识符两次作为不同的类型。

删除第一个typedef typedef struct list_elements* item; 并将第二个放在headerList.h标题中,该标题必须包含在linkedList.c中。

标头中的声明将类型item定义为指向struct list_elements的指针。 来自linkedList.c声明声明了相同的名称item ,作为struct list_elements类型本身的别名。 虽然这本身并不是错误的,但肯定会令人困惑。 它确实使linkedList.c错误地#include头文件,通常它适合它。

您应该在头文件中创建所有类型声明,并将其包含在两个 C源文件中,以确保它们共享这些声明。 类型声明至少包括typedefstructunion声明以及函数原型。 这不是您可能希望放在标题中的独家列表。

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

其中一个是用你想要在.h文件中使用的函数原型来定义结构,并在单独的.c中使用函数的代码(当然在.h文件中用相同的原型编写),然后您现在可以通过包含头文件来使用任何其他.c文件中的结构。 例如:

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 fct1() { //... } void fct2() { //... } 

你的program.c

 include StType.h int main() { Something s; fct1(); } 

我通常做这样的事情。