2015-05-09 173 views
-1

解决如何将cpp和h文件链接在一起?

// Solution: 
// foo.c includes foo.h; bar.c includes bar.h 
g++ -Wall -Wextra -Werror -pedantic -o foobar foo.cpp bar.cpp 

我有两个cpp文件和两个H文件。我有第一个cpp链接到相同名称的h文件链接到第二个cpp文件链接到第二个h文件。这是我应该将文件链接在一起的方式吗?

我的程序不工作。也有错误,但我需要确定这是否是错误的一部分。这是定义/链接cpp和h文件的方式吗?

// file: foo.cpp 
#include "foo.h" 

// file: foo.h 
#include "bar.cpp" 

#include <string> 
#include <sstream> 
#include <iostream> 
using std::cin; 
using std::cout; 
using std::cerr; 
using std::stringstream; 
using std::string; 
using std::endl; 

// file: bar.cpp 
#include "bar.h" 

// file: bar.h 
// ... 
+0

这看起来公然错了:'#include“bar.cpp”'通常你永远不会包含'.cpp'文件。将每个'.cpp'文件编译为'.o'或'.obj',并调用链接器从所有这些目标文件创建一个可执行文件。 –

+3

你可能想看看http://david.rothlis.net/c/compilation_model/ –

回答

5

完全错误。头文件将被包含在cpp文件中。 Cpp文件从不包含在任何内容中。通常,头文件保存声明,而cpp文件保存定义。

如果你的程序由2个cpp文件组成,你不需要在其他文件中包含一个文件。相反,你将它们一起编译成一个可执行文件。

我猜想你对声明和定义的工作方式有些误解,或者包括什么。我建议你刷一本教科书,或者看看github上的一些小型C++程序。

1

不,您不应该使用#include cpp文件。此外,您使用的术语'链接'不正确。

  • cpp文件应该包含它们对应的头文件,如果它们有第一行:bar.cpp应该包括#include bar.h,foo.cpp应该包含foo.h.
  • 每个头文件应该包含在相应cpp文件中的第一个头文件中,即使您必须为#include头文件创建一个空的对应cpp文件。
  • 头文件应该只包含其他头文件
  • cpp文件应该为其他接口使用#include头文件,或者应该包含前向声明(如果可以编写有效的前向声明)。

'连接'与#include无关。这是编译/汇编完成后链接器执行的任务。链接是在目标文件和库上执行的,而不是头文件或cpp文件。