C ++ -Undefined参考bug,eventhough文件应该包含在同一个文件夹中

时间:2014-05-27 11:26:17

标签: c++ reference include undefined

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

此方法的主体位于“average.cpp”中。但是当我尝试编译我的main.cpp时,我得到以下错误代码“\ main.o:main.cpp ||未定义引用`average(float,float&)'”。

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

提示:我正在使用带有ming32-gpp编译器的Code :: Blocks。

我做错了什么,或者它是编译器错误还是smth?

问候

代码: 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;
}

1 个答案:

答案 0 :(得分:0)

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

  1. 预编译(包含,宏的替换......)
  2. 目标文件生成。
  3. 联。
  4. 第1步工作正常,否则您将收到一个commpiler错误。步骤2或3或两者都有问题。 &#34;未定义的引用&#34; error表示链接器未找到对方法的已编译版本的引用。

    首先,您应该检查是否正在构建所有目标文件。您可以通过查看编译器输出并查看是否看到任何消息(例如g ++ filename .. filename.o),或查看构建目录以查看是否每个* .cpp文件都有* .o文件来判断这一点有

    最后一步是链接,链接器将所有.o文件加入到exectuable中。

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

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

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

    &#34; mingw32-g ++。exe -c main.cpp -o main.o&#34; &#34; mingw32-g ++。exe -o main.exe main.o

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