2015-05-09 45 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文件。

相關問題