回答
簡單的答案是,你幾乎總是想包含.h文件,並編譯.cpp文件。 CPP文件(通常)是真實的代碼,而H文件通常是前向聲明。
較長的答案是,你可以爲包括,它可能爲你工作,但都將給稍有不同的結果。
「include」的功能基本上是複製/粘貼該行中的文件。無論擴展名是什麼,它都會以相同的方式包含文件的內容。
但C++代碼,按照慣例,通常這樣寫:
SomeClass.cpp -
#include "SomeClass.h"
#include <iostream>
void SomeClass::SomeFunction()
{
std::cout << "Hello world\n";
}
SomeClass.h -
class SomeClass
{
public:
void SomeFunction();
};
如果包括這類原因,你可以使用它的代碼。但是,如果您有多個包含相同.cpp文件的文件,則可能會出現有關重新定義的錯誤。頭文件(.h文件)通常只包含前向聲明,沒有實現,所以將它們包含在多個地方不會給你重定義的錯誤。
如果你以某種方式管理包括來自其他.cpp文件.cpp文件時,編譯沒有錯誤,你仍然可以出現重複的代碼。如果您在多個其他文件中包含相同的.cpp文件,則會發生這種情況。這就像你寫了兩次函數。這會讓你的程序在磁盤上更大,編譯時間更長,運行速度更慢。
主要需要注意的是,這個實現/向前聲明慣例並不適用於使用模板的代碼實現。模板代碼仍將作爲.h文件提交給您,但它(通常)直接在.h文件中實現,並且不會附帶.cpp文件。
+1很好的答案,沒有任何「從不」。人們應該使用常識來分割代碼。是的,按照慣例,頭文件(* .h)的設計必須能夠在任何地方安全地包含,而不會在編譯單元中施加任何額外的依賴性或副作用(如具有「使用名稱空間...」)它包括在內。 – bobah 2010-05-22 09:41:28
只是爲了澄清,當你說「包含.h文件和編譯.cpp文件」時,你的意思是除了包含來自所謂主類的頭文件(.h)之外,還必須添加實現( .cpp)文件與主類一起用於編譯器行? – StockB 2013-03-05 18:47:24
@StockB:由於C++中沒有「主類」,所以不清楚你的意思是「與主類一起」,但你所說的含糊不清。另外,不同的編譯器工作方式不同,所以我不能說你可以肯定地將多個cpp文件添加到你正在使用的編譯器的命令行中。主要區別在於'.h'文件傾向於包含在內,而'.cpp'往往直接傳遞給編譯器。 – 2013-03-05 19:18:38
.h文件通常包含類聲明和.cpp文件的類定義(實現)。您應該在.cpp文件中包含.h。
好的經驗法則是永遠不要包含.cpp文件,因爲#include
指令只是將包含文件的內容複製到包含文件中。你可能會以多種包含/定義結束,你肯定不想這樣做。
不是說OP在問這個問題,但是你可能想在定義模板代碼時包含源文件。如果您試圖將轉發聲明和實現保存在單獨的文件中,或者您正在解決與模板相關的代碼擴展問題,您可能會這樣做。請參閱:http://www.parashift.com/c++-faq-lite/templates.html – 2010-05-22 09:35:50
通常,最好在頭文件中寫的.h
#ifndef H_someClass
#define H_someClass
類SomeClass的{市民: 無效SomeFunction(); };
#endif
,爲了不要讓錯誤關於重新定義,當u需要在其他文件.cpp文件。
- 1. 什麼是頭文件和C++中的實現文件?
- 2. 爲什麼頭文件包含完整的代碼實現?
- 3. 爲什麼包含頭文件而不是實現?
- 4. 在C++中包含頭文件(類定義和方法實現)
- 5. C++頭文件包含
- 6. C++頭文件包含
- 7. C++包含頭文件
- 8. C++包含頭文件
- 9. 在類頭和實現中包含頭文件?
- 10. 爲什麼包含標準頭文件?
- 11. 在其他實現文件中包含實現文件有什麼用處?
- 12. 當沒有實現文件時包含頭文件?
- 13. 如何在純C和CUDA C文件中包含頭文件?
- 14. 當包含不同的頭文件時,C實現是否可以隱式地包含標準頭文件?
- 15. Objective C頭文件實現
- 16. 關鍵字包含在頭文件vs源/實現文件中的C++「規則」
- 17. 包含頭文件
- 18. C++實現和頭文件鏈接
- 19. C++單獨實現和頭文件
- 20. 爲什麼在方法定義文件中包含頭文件?
- 21. 在頭文件中包含模板實現cpp文件和鏈接混淆
- 22. C++頭文件和包括
- 23. C++頭文件本身不包含依賴文件頭
- 24. 爲什麼我需要在同名的.c文件中包含.h頭文件?
- 25. C++ #ifndef用於包含文件,爲什麼所有頭文件都用於頭文件?
- 26. 什麼框架和頭文件包含常量kAudioUnitSubType_RemoteIO
- 27. 使用頭文件和實現文件的C++類
- 28. C++頭文件/實現文件和重載運算符
- 29. C++頭文件包含錯誤
- 30. C++包含頭文件問題
許多模糊包括http://stackoverflow.com/questions/280033/c-header-files-code-separation – 2010-05-22 09:33:55