如何在C中使用带有头文件的链表?
我必须创建一个程序,用链表执行各种功能。我必须将函数保存在与main()不同的单独文件中,但是我不知道如何将列表包含在头文件中。 我尝试了不同的组合,现在linkedList.h文件中有:如何在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时,
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();
}