我一直在開發的主要是模板函數庫和管理,以保持組織(在某種程度上)東西,在下列方式:創建的模板函數庫
// MyLib.h
class MyLib
{
template<class T>
static void Func1()
{
}
template<class T>
static void Func2()
{
}
};
而且顯然要願意作出這個:
MyLib::Func1();
正如你所看到的,隨着更多功能的添加,這可能會變得非常難看。至少,我想將它分成不同的文件!
我最初認爲定義在MyLib
命名空間在不同的文件功能的批次,然後用MyLib.h
鞏固所有的人,但我一直得到了鏈接錯誤的卡車 - 當然,我可以把這個方法,如果仔細看這是建議。
有什麼想法?
PS:由於大多數這些函數有不同的目標,所以將它們歸類到我們實例化對象的類下是沒有意義的。我在這裏使用了一個class
,所以我不必擔心我定義函數的順序(在MyLib
之間也有相互依賴的函數)。
鏈接器錯誤:
所以基本結構是這樣的:我有兩個類(說& B)編譯爲靜態庫和運行這些類的實例的主應用。這些類A & B使用MyLib
中的函數。當A & B正在編譯時,我得到LNK4006
警告,其中說明屬於MyLib
的符號已經在項目中的OBJ文件中定義,並且它忽略了它。
當它歸結到它成爲一個LNK2005
錯誤,指出它是在一個& B.
更新OBJ文件中已經定義的應用程序: 謝謝Mike & Mathieu爲內聯的想法 - 這是問題!
除了一個問題:我有我明確專業化,這些都導致already defined
錯誤(LNK2005
)一些模板函數:
template<class t> int Cvt(){}
template<> int Cvt<unsigned char>(){return 1;}
template<> int Cvt<char>(){return 2;}
template<> int Cvt<unsigned short>(){return 3;}
任何想法?
Conlusion:
通過定義模板功能,在一個單獨的文件解決了明確的分工問題 - 感謝您的幫助!
這是正確的做法。就個人而言,我不會將它們合併爲一個「包含全世界」標題,因爲這樣會增加編譯時間。這樣做不應該有鏈接器錯誤 - 你能舉一個例子或兩個? – 2010-01-22 13:56:27
更新爲鏈接器錯誤 – Jacob 2010-01-22 15:53:21
我們必須查看鏈接器錯誤和相關功能來診斷問題。你是否在庫中創建命名對象?一般來說,你不應該那樣做。 – 2010-01-22 16:26:07