使用 CodeBlocks 对“function”的未定义引用

Undefined reference to 'function' using CodeBlocks

提问人:Benji HS 提问时间:6/18/2022 最后编辑:AdrianBenji HS 更新时间:6/28/2022 访问量:68

问:

我在一个简单的项目中遇到以下错误,以开始使用 CodeBlocks 进行学习。

E:\CodeBlocks\Projects\Triplet-CLEON-Benjamin\main.c|5|undefined reference to `initTriplet'|
C:\msys64\mingw64\bin\..\lib\gcc\x86_64-w64-mingw32\12.1.0\..\..\..\..\x86_64-w64-mingw32\bin\ld.exe: E:\CodeBlocks\Projects\Triplet-CLEON-Benjamin\main.c|7|undefined reference to `AfficheTriplet'|

我的项目中只有 3 个文件,分别是:

main.c

#include "triplet.h"

int main()
{
    triplet myTriplet = initTriplet(5,8,7);

    AfficheTriplet(myTriplet);

    return 0;
}

三重奏.c

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

void AfficheTriplet(triplet myTriplet)
{
    printf("Triplet: \n\t Premier %d\n\t Second %d\n\t Troisieme %d", myTriplet.p, myTriplet.d, myTriplet.t);
}

triplet initTriplet(int a, int b, int c)
{
    triplet myTriplet = {a,b,c};

    return myTriplet;
}

三胞胎.h

#ifndef TRIPLET_H_INCLUDED
#define TRIPLET_H_INCLUDED

typedef struct triplet triplet;
struct triplet
{
    int p;
    int d;
    int t;
};

triplet triTripletV1(triplet myTriplet);
void    triTripletV2(triplet myTriplet);

void AfficheTriplet(triplet myTriplet);
triplet initTriplet(int a, int b, int c);

#endif // TRIPLET_H_INCLUDED

在我的主文件中,如果我包含三元组,如果我包含三元组,则运行其他工作,我有以前的错误。

此外,我的项目构建为

  • 项目名称
    • 来源
      • main.c
      • 三重奏.c
      • 三胞胎.h

有什么帮助吗?

c 编译器错误 未定义引用

评论

0赞 Kolodez 6/19/2022
请出示您的编译器指令。
0赞 Kolodez 6/19/2022
另外,我怀疑是否允许同时用作 typedef-name 和 struct 标签。无论如何,这是不好的做法。你可以写。triplettypedef struct { ... } triplet;
0赞 Kitswas 6/22/2022
而不是尝试#include "triplet.h"#include "Headers/triplet.h"
0赞 Benji HS 6/23/2022
include give me “没有这样的文件或目录Headers/triplet.h
0赞 Benji HS 6/23/2022
@Kolodez我不知道我的编译器指令在哪里,只是使用构建按钮。

答:

0赞 Adrian 6/19/2022 #1

我在CodeBlocks中编译您的应用程序没有任何问题,因此问题可能是头文件和源文件不是您项目的一部分。如果您已经创建了一个项目,那么您可以尝试以下操作:

  1. 打开您的项目 (*.cbp)
  2. 点击名为“项目”的选项卡
  3. 点击“添加文件...”
  4. 选择所有源文件和头文件(triplet.c 和 triplet.h)
  5. 点击“打开”
  6. 生成项目

评论

0赞 Benji HS 6/23/2022
我有同样的错误,sry
0赞 Adrian 6/23/2022
@BenjiHS 您是否将文件作为一个类添加到项目中?如果是,那么这可能是您的问题。对于 C,您应该使用 File -> New -> Empty File 将新文件添加到项目中。只是出于好奇,您可以尝试编译对我来说效果很好的相同项目:dropbox.com/s/pukkqygtykh8dvw/Triplet.zip?dl=1
0赞 Adrian 6/23/2022
@BenjiHS 还有一件事。如果您尝试编译我的项目文件,那么您需要在我的回答中执行上述过程才能使其正常工作。否则,您将收到与您发布的相同的错误消息。
0赞 Benji HS 6/28/2022
好的,这只是一个设置问题,我将在下面解释
0赞 Benji HS 6/28/2022 #2

我找到了答案,这只是一个设置错误......

在我的文件选项中,我必须有:

  • main.c => 编译文件和链接文件
  • triplet.c => 编译文件和链接文件
  • triplet.h => 没有人

如果我右键单击 -> 属性 ->在每个文件上的文件上构建,我必须确保选中 Debug 复选框。

评论

0赞 Adrian 6/30/2022
那么,你能将自己的答案标记为公认的解决方案吗?