如何在其他源文件中定义函数:C ++ CodeBlocks

时间:2014-01-16 16:35:26

标签: c++ header-files

我试图在另一个源文件中分离我的函数。但是我在添加函数时遇到多个定义的错误。

主要源文件

Main.cpp的

#include<iostream>
#include "myHeader.h"
using namespace std;

int main()
{
int result = add(1,2);
}

头文件“myHeader.h”

#include "calc.cpp"
int add(int, int);

其他源文件“calc.cpp”

int add(int a, int b)
{
return a+b;
}

6 个答案:

答案 0 :(得分:7)

您需要的是:

“myHeader.h”

#ifndef MY_HEADER
#define MY_HEADER
 int add(int, int);
#endif 

calc.cpp

#include "myHeader.h"

int add(int a, int b)
{
 return a+b;
}

的main.cpp

#include "myHeader.h"

int main()
{
  int result = add(1,2);
  return 0;
}

将.cpp包含在.h中。头文件用于告诉编译器是否存在具有指定原型的函数,但是liker将关注将函数调用与该函数的实现进行匹配。

此外,通常最好为您提供头文件和.cpp相同的名称,因此calc.hcalc.cpp而不是myHeader.h

答案 1 :(得分:2)

请勿在{{1​​}}中加入calc.cpp。除了那一行之外,就标题而言,你的例子是正确的。 (myHeader.h应该返回一个值)。

main()calc.cpp是两个不同的“编译单元”,它们将分别编译为目标文件。然后,这两个目标文件由链接器组合成一个可执行文件。

答案 2 :(得分:1)

问题在于您将代码文件(cpp)包含在标头中。你应该做反过来。将标题“myHeader.h”包含在calc.cpp中。为了保持连贯,您应该将您的标题命名为与您的代码文件相同的名称,因此标题的calc.h和代码的calc.cpp。

答案 3 :(得分:0)

#include "calc.cpp"

不要这样做 - 它包含任何包含标题的翻译单元中的函数定义,因此您最终会得到多个定义。

如果没有它,如果您从两个源文件构建程序,您的代码应该没问题。 main.cpp将包含声明,以便它知道该函数存在;来自其他源文件的定义将由链接器包含在程序中。

答案 4 :(得分:0)

这很简单。请勿将"calc.cpp"文件包含在"MyHeader.h"文件中。

另请参阅C / C ++ IncludeGuard here

这是C / C ++编程的基础。你需要多次使用它。

保护您的“myHeader.h”

#ifndef ADD_HEADER
#define ADD_HEADER
 int add(int, int);
#endif // ADD_HEADER

答案 5 :(得分:0)

不包括calc.cpp。这导致了重新定义

你可以在calc.cpp中包含myHeader.h