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

时间:2015-05-09 15:57:06

标签: c++

解决

// 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文件,该文件链接到链接到第二个h文件的第二个cpp文件。这是我将文件链接在一起的方式吗?

我的程序无效。也有错误,但我需要确保这是否是错误的一部分。这是定义/链接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
 // ...

2 个答案:

答案 0 :(得分:5)

完全错了。头文件将包含在cpp文件中。任何东西都不包含Cpp文件。通常,头文件包含声明,而cpp文件包含定义。

如果您的程序包含2个cpp文件,则不会在另一个文件中包含一个。相反,您将它们一起编译为单个可执行文件。

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

答案 1 :(得分:1)

没有。你不应该&amp; cpp文件。此外,您还在使用“&#39; link&#39;不正确。

  • cpp文件应该#include相应的头文件,如果它们有一个,在第一行:bar.cpp应该#include bar.h,foo.cpp应该#include foo.h。
  • 每个标题都应该是#included作为相应cpp文件中的第一个标题,即使你必须为#include标题创建一个空的相应cpp文件。
  • 头文件应该#include只包含其他标题
  • cpp文件应该#include他们使用的其他接口的头文件,或者如果你能编写有效的前向声明,则应该包含前向声明。

&#39;链接&#39;与#include无关。它是在执行编译/汇编后由链接器执行的任务。链接是在目标文件和库上执行的,而不是头文件或cpp文件。