提问人:Benji HS 提问时间:6/18/2022 最后编辑:AdrianBenji HS 更新时间:6/28/2022 访问量:68
使用 CodeBlocks 对“function”的未定义引用
Undefined reference to 'function' using CodeBlocks
问:
我在一个简单的项目中遇到以下错误,以开始使用 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
- 来源
有什么帮助吗?
答:
0赞
Adrian
6/19/2022
#1
我在CodeBlocks中编译您的应用程序没有任何问题,因此问题可能是头文件和源文件不是您项目的一部分。如果您已经创建了一个项目,那么您可以尝试以下操作:
- 打开您的项目 (*.cbp)
- 点击名为“项目”的选项卡
- 点击“添加文件...”
- 选择所有源文件和头文件(triplet.c 和 triplet.h)
- 点击“打开”
- 生成项目
评论
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
那么,你能将自己的答案标记为公认的解决方案吗?
评论
triplet
typedef struct { ... } triplet;
#include "triplet.h"
#include "Headers/triplet.h"
Headers/triplet.h