未定义的引用错误,即使应该包含的文件在同一个文件夹中

C++ -Undefined Reference bug, eventhough files that shall be included are in same folder

本文关键字:文件 包含 文件夹 同一个 错误 引用 未定义      更新时间:2023-10-16

我有一些代码的问题,这些代码分布在不同的文件上。我有一个main.cpp,其中方法被调用。在这个main.cpp中,我包含了一个"declarationen .h",它用方法的签名声明了这些方法。例如void "average(float, float&);"

方法体在"average.cpp"文件中。但是当我尝试编译我的main.cpp时,我得到以下错误代码"main.o:main.cpp||未定义引用' average(float, float&)'"。

所有文件都在同一个目录中,正如我所说的,我将头文件包括在我的main.cpp中。

提示:我使用Code::Blocks与ming32-gpp编译器。

我做了什么可怕的错误,还是它是一个编译器的错误或什么?

的问候

代码:Main.cpp

#include "deklarationen.h"
#include <iostream>
using namespace std;
int main ()
{
//body of the function
average(b,mittel);
}

代码:Deklarationen.h(同一文件夹)

#ifndef _DEKLARATIONEN_H_
#define _DEKLARATIONEN_H_
float a;
void einlesen(float &a, float &b);
void average(float, float &avg);
void quotient(float, float&);
void produkt(float b, float& quot);
float summe(float);
extern float differenz(float);
#endif  /* _DEKLARATIONEN_H_ */

代码:average.cpp(还是同一个文件夹)

void average(float b,float &avg)
{
    avg = (a+b)/2;
}

当您编译c++代码时,会发生以下(简化的)步骤:

  1. 预编译(替换包含,宏…)
  2. 对象文件生成。
  3. 链接。

步骤1工作得很好,否则您将得到一个编译器错误。你在第二步或第三步中有问题,或者两者都有问题。"未定义的引用"错误意味着链接器没有找到对方法的编译版本的引用。

首先,您应该检查是否正在构建所有的目标文件。您可以通过查看编译器输出并查看是否看到任何类似g++ filename ..的消息来判断这一点。文件名。O,或者在构建目录中查看是否有*。

*.cpp文件

最后一步是链接,链接器将所有的。o文件连接成一个可执行文件。

我不使用CodeBlocks,但可能你的问题是你需要指示代码块将包含缺失引用的文件包含到构建中。

或者你可以手工编写一个makefile,学习cmake,或者从命令行编译,所有有用的技能

我看到你发布了代码块正在执行的构建命令:

"mingw32-g++.exe -c main.cpp -o main. exe "0 " "mingw32-g++.exe - 0 main.exe main.o

这里只编译main文件,没有编译或链接其他文件