2013-05-15 52 views
0

嗨,我有什麼是希望快速的問題。作爲家庭作業的一部分,我被要求編寫自己的模板向量類(大部分代碼都在那裏,只需要進行擴展)。雖然我理解它是如何工作的以及它的作用,我不知道在哪裏放置代碼或引用它,因爲我從來沒有在程序中的上下文中看到它。哪裏可以放置STL /模板代碼C++?

我是否創建了一個新的cpp文件,其中包含所有這些信息,還是僅將它添加到我的主要方法的上方?如果我創建一個新文件(cpp或h),我如何引用它,只需#include就像正常一樣?

這看起來很簡單,但我試過創建一個新的.h文件,然後將其包含在我的主程序中,但我總是得到範圍定義錯誤。

+0

把它放在'my_vector.hpp'之類的東西里,然後每當你想在'.cpp'文件中使用'#include my_vector.hpp'。 – Yuushi

+0

一些代碼和一個特定的例子會有所幫助。 – chris

回答

2

大多數編譯器要求你把所有的模板代碼放在一個頭文件中,而不是源文件中。這是由於模板擴展工作的方式。你只需在需要使用矢量類的文件中包含該頭文件。

有些事情要注意創造一個頭時:

  1. 防止多包容。如果你的編譯器支持#pragma once,你可以把它放在頂部,否則使用#ifndef MY_HEADER_H .......模式。
  2. 不要忘記在你的課堂上放一個分號!
  3. 永遠不要將using namespace whatever;放在標題的外部範圍內(可以在塊範圍內使用它,例如namespace something { ... }或函數)。
  4. 如果您正在調用您的類vector,請小心與std::vector的名稱衝突 - 確保在包含頭之前沒有人導入std名稱空間。
+0

修復了你的雙下劃線。這是在擾亂我。 – chris

+0

我接受這個只是因爲它提供了一些額外的信息。事實證明,我的問題的一部分是我寫了一個聲明的方法之一,使得錯誤列表比我預期的要長,似乎現在正在工作,非常感謝! – Scott

+0

哈哈哈夠公平的@chris - 我不想看看你的氣質如何處理典型的20歲的代碼庫。 – paddy

1

您需要牢記的一點是,由於模板的編譯模型,您應該將模板聲明和定義放在頭文件中。

您可以爲模板化矢量類創建頭文件,並在您想在其他.h.cpp文件中使用該頭文件時包含此頭文件。

您也可以將它們放在main的內部,但以前的選項更適合您維護您的代碼。