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

How to use a linked list with a header file in C?

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

typedef struct list_elements* item;

而这个在 linkedList.c

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

问题是,当我尝试编译 main.c 时,我收到消息:"request for member ‘value’ in something not a structure or union" 和 "request for member ‘next’ in something not a structure or union"。

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

(当我在单个文件中测试所有功能时,这些功能有效,所以我认为它们不是问题所在);

您正在尝试将同一标识符键入不同类型两次。

删除第一个 typedef typedef struct list_elements* item; 并将第二个放在 header linkedList.h 中,它必须包含在 linkedList.c.

您 header 的声明将类型 item 定义为指向 struct list_elements 的指针。来自 linkedList.c 的声明声明了相同的名称 item 作为类型 struct list_elements 本身的别名。虽然这并非 本质上 错误,但肯定会造成混淆。 linkedList.c#include header 文件确实是错误的,通常它这样做是合适的。

您应该在 header 文件中进行所有类型声明,并将其包含在 两个 C 源文件中以确保它们共享这些声明。类型声明至少包括 typedefs、structunion 声明以及函数原型。这不是您可能想要放入 header.

中的唯一列表

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

其中之一是在 .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();
}

我经常这样做。