C 头文件问题:未定义的引用错误

问题描述 投票:0回答:1

我目前正在从事一个 C 编程项目,遇到了一个我正在努力解决的问题。

问题:

我使用 Visual Studio Code (VS Code) 作为我的代码编辑器。该项目由以下文件组成:

main.c:

#include "list.h"
#include <stdio.h>

int main()
{
    List* l = lst_create();
    l = lst_inset(l,10);
    l = lst_inset(l,20);
    l = lst_inset(l,25);
    l = lst_inset(l,30);
    //l = lst_rem(l,10); 
    lst_print(l);

    return 0;
}

列表.c:

#include <stdio.h>
#include <stdlib.h>
#include "list.h"

struct list
{
    int info;
    List *next;
};

List* lst_create()
{
    return NULL;
}

int lst_empty(List *l)
{
    return (l == NULL);
}

List* lst_inset(List *l, int info)
{
    List* lAux = (List*) malloc(sizeof(List));

    lAux -> info = info;
    lAux -> next = l;

    return lAux;
}

List* lst_search(List *l, int info)
{
    List* lAux = l;

    while (lAux != NULL)
    {
        if (lAux -> info == info)
        {
            return lAux;
        }

        lAux = lAux -> next;
    }

    return NULL;
}

void lst_print(List *l)
{
    List* lAux = l;

    while (lAux != NULL)
    {
        printf("Info = %d\n", lAux -> info);
        lAux = lAux -> next;
    }
}

列表.h:

#ifndef LIST_H
#define LIST_H

typedef struct list List;

List* lst_create();

int lst_empty(List *l);

List* lst_inset(List *l, int info);

//List* lst_remove(List *l, int info);

//void lst_free(List *l);

void lst_print(List *l);

List* lst_search(List *l, int info);

#endif

我已将“list.h”包含在“main.c”中以使用list.c中定义的函数。但是,当我尝试编译该项目时,遇到以下链接器错误:

/usr/bin/ld: /tmp/ccCzNKTb.o: in function 'main':
/home/user/Codes/C/TestProject/src/main.c:7: undefined reference to 'lst_create'
/home/user/Codes/C/TestProject/src/main.c:8: undefined reference to 'lst_insert'
/home/user/Codes/C/TestProject/src/main.c:9: undefined reference to 'lst_insert'
/home/user/Codes/C/TestProject/src/main.c:10: undefined reference to 'lst_insert'
/home/user/Codes/C/TestProject/src/main.c:11: undefined reference to 'lst_insert'
/home/user/Codes/C/TestProject/src/main.c:13: undefined reference to 'lst_print'
collect2: error: ld returned 1 exit status

我已确保 main.c 和 list.c 都存在于指定目录中。函数 lst_create、lst_insert 和 lst_print 在 list.h 中声明并在 list.c 中定义。我还在两个不同的 C IDE 中测试了代码,但遇到了相同的“未定义引用”错误。我通过参考 YouTube 教学视频验证了我的代码,并将其与示例代码交叉引用。尽管我尽了最大努力,但仍无法解决这个问题。我什至咨询了我的编程教授,他无法找出问题所在。

c visual-studio-code pointers header-files
1个回答
0
投票

因此,使用编译语言时主要有两类错误。

  • 链接器错误
  • 来源错误

当特定文件中存在无效语法时,会发现源错误。

当特定文件中存在无效链接时,会发现链接器错误。

这里的Linker报告找不到具体的函数。这是因为您没有向编译器提供信息,而编译器又没有向链接器提供该信息。

根据您的特定编译器,您会发现一些标志,允许您指定要在程序中包含哪些源文件(.c / .cpp)。通常还有通配符说明符 (*),它允许您包含给定文件夹中的所有源。

© www.soinside.com 2019 - 2024. All rights reserved.