2017-02-17 106 views
0

我負責實施課程。我已經提供了一個名爲「pro.h」的.h文件,我不能以任何方式改變。 .h文件只包含函數原型,沒有定義。類塊後,它有一個爲什麼.hpp文件將包含在.h文件中?

#include "pro.hpp" 

我應該創建一個file.hpp添加的定義雖然,我很困惑,因爲定義通常包含在.cpp文件不是另一個頭文件。你爲什麼認爲這會完成?我是否會將這些定義的格式設置爲相同的原因,以便在.cpp文件中執行此操作,或者重寫頭文件以包含定義(這看起來效率不高)。

+2

「.h」文件,「.hpp」文件或任何其他文件沒有什麼不可思議的。編譯器只是按照指示處理所有'#inc'文件。您的文件擴展名可以是.h,.hpp,.xyz或.hjgiurejkcxkj。它仍然是有效的C++,只要包含邏輯的文件包含有效的C++代碼即可。 –

+0

謝謝,我只是想確保編譯器不會因爲擴展名而以不同的方式進行編譯。 –

+0

@AlessandroLorusso你(通常)並不自己編譯頭文件,所以沒有問題。 –

回答

1

你的老師希望你實現一個模板類。關於模板的事情是,他們需要使用正確的模板類型來實例化,這意味着在你知道它的類型之前,你不能創建二進制文件。這就是爲什麼實現通常寫在頭文件中的原因。看看f.e. here ...

如果你是新的模板,只問叔叔google或螞蟻wiki

地址:

簡單地說......當你在foo.cpp有事,它會被轉換爲二進制文件,相應的頭文件foo.hpp可以作爲我可以從其他代碼中使用的二進制文件中的函數的參考。重要的是這個二進制文件不會(真的)改變了。

另一方面,模板不能轉換爲二進制文件,直到您知道它將在哪種類型上運行...如果您使用模板類一次用int,而另一次用vector<double>作爲模板參數,生成的二進制文件可能會非常不同......因此,只有在知道類型後,才能將代碼編譯到二進制文件中,因此您需要傳遞代碼(在頭文件中)而不僅僅是函數原型。

希望這是明確的。畢竟在這裏的早上幾乎是3點。如果不是,this應該是非常全面的。

+0

這確實幫了很大忙,謝謝 –

相關問題