C++ C++-未定义的参考错误,即使应包含的文件在同一文件夹中
我有一个问题,一些代码,这是分布在不同的文件。 我有一个main.cpp,在这里调用方法。在main.cpp中,我包含了一个“deklaorationen.h”,它声明了带有签名的方法。例如void“average(float,float&);” 此方法的主体位于“average.cpp”中。但是,当我试图编译main.cpp时,我得到了以下错误代码“\main.o:main.cpp | |未定义对`average(float,float&')的引用” 所有文件都在同一个目录中,正如我所说,我将头文件包括在main.cpp中 提示:我正在将Code::Blocks与ming32 gpp编译器一起使用 我是做错了什么,还是编译器错误或smth 问候 代码: Main.cpp 代码:average.cpp(仍为同一文件夹)C++ C++-未定义的参考错误,即使应包含的文件在同一文件夹中,c++,reference,include,undefined,C++,Reference,Include,Undefined,我有一个问题,一些代码,这是分布在不同的文件。 我有一个main.cpp,在这里调用方法。在main.cpp中,我包含了一个“deklaorationen.h”,它声明了带有签名的方法。例如void“average(float,float&);” 此方法的主体位于“average.cpp”中。但是,当我试图编译main.cpp时,我得到了以下错误代码“\main.o:main.cpp | |未定义对`average(float,float&')的引用” 所有文件都在同一个目录中,正如我所说,我将
编译C++代码时,会发生以下(简化)步骤:
“mingw32-g++.exe-c main.cpp-o main.o”“mingw32-g++.exe-o main.exe main.o”
这里只编译main,不编译或链接其他文件。是否编译了
average.cpp
?或者更好:共享您正在运行的构建命令。“mingw32-g++.exe-c main.cpp-o main.o”“mingw32-g++.exe-o main.exe main.o”是我的IDE正在执行的构建命令PS:@πάνταῥεῖ 我想我知道一般的未定义引用是什么。但我不知道为什么他不能链接同一文件夹中的文件。@user3679491“我想我知道一般的未定义引用是什么”显然不是!你没有编译和链接average.cpp
。不管它是否在同一文件夹中,都没有问题自动sed到编译器/链接器。@πάνταῥεῖ 我说了“我想”,然后对此我真的很抱歉。问题是,平均方法使用的是全局变量a,目前无法编译。当我包括“dekladerationen.h“对于变量a,它向'WinMain@16'因为它没有main方法。@user3679491mingw32-g++.exe-c main.cpp average.cpp-o main.o
应该能做到这一点。完全正确。我自己认为是链接造成了麻烦,因为我对每个.cpp文件都有一个对象文件。正如我所说的,它曾经起作用。但不知怎的,它没有联系起来。(当我尝试编译一个只使用1.cpp的不同代码时,一切都很好)我甚至尝试重新安装code::blocks来重新安装内置的链接器/编译器,因为,正如我所说的。这是我试图mingw32-g++.exe-o main.exe main.o average.o differencez.o einlesen.o produkt.o quotient.o summe.o时的错误代码。我查看了你的编译命令,它没有生成main.o以外的任何.o文件。引号中的第一行生成main.o,第二行表示将main.o转换为可执行文件。它还应该在要链接的.o文件列表中包含average.o。在发布的命令中,average.o既不编译也不链接。这表明您以前在构建中使用average.cpp,现在不再使用。尝试一个干净的构建,看看是否能重新生成average.o。根据您的描述,我猜您的构建目标列表中有average.cpp,现在不再有了。
#include "deklarationen.h"
#include <iostream>
using namespace std;
int main ()
{
//body of the function
average(b,mittel);
}
#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_ */
void average(float b,float &avg)
{
avg = (a+b)/2;
}