如何在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'"one_answers"请求非结构或联集中的成员'next'"。

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

(当我在一个文件中测试整个功能时,这些功能就可以工作,所以我不认为它们是问题所在);

您正试图将同一标识符类型定义为不同类型两次。

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

头中的声明将类型item定义为指向struct list_elements的指针。来自linkedList.c的声明声明了与类型struct list_elements本身的别名相同的名称item。尽管这不是固有的错误,但肯定会令人困惑。它确实使linkedList.c#include成为头文件是错误的,通常情况下这样做是合适的

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

实现这一点的方法不止一种:

其中之一是用你想在.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()
{
    //...
}

您的程序.c

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

我经常做这样的事。

相关内容

  • 没有找到相关文章

最新更新