我在C++中實現了一個簡單的STL映射。分解出來的比較,因爲我奉命到一個類型,然後實現比較如下圖所示:用戶定義的類類型模板參數的鏈接錯誤
template <typename T> int KeyCompare<T>::operator() (T tKey1, T tKey2)
{
if(tKey1 < tKey2)
return -1;
else if(tKey1 > tKey2)
return 1;
else
return 0;
}
這裏,tKey1和tKet2是兩個鍵,我比較。這適用於所有基本數據類型和字符串。我添加了一個模板特殊化比較命名用戶定義類型測試的鑰匙,並增加了專業化如下:
int KeyCompare<Test>::operator() (Test tKey1, Test tKey2)
{
if(tKey1.a < tKey2.a)
return -1;
else if(tKey1.a > tKey2.a)
return 1;
else
return 0;
}
,當我運行它,我得到一個鏈接錯誤說
SimpleMap。 obj:錯誤LNK2005:「public:int __thiscall KeyCompare :: operator()(class Test,class Test)」(?? R?$ KeyCompare @ VTest @@@@ QAEHVTest @@ 0 @ Z)已經在MapTest.obj中定義
SimpleMap.obj:error LNK2005:「public:__thiscall KeyCompare ::〜KeyCompare(vo id)「(?? 1?$ KeyCompare @ VTest @@@@ QAE @ XZ)已經在MapTest.obj中定義了
SimpleMap.obj:error LNK2005:」public:__thiscall KeyCompare :: KeyCompare(void)「已經在MapTest.obj中定義了0 0 $ KeyCompare @ VTester @@@@ QAE @ XZ
MapTest.cpp是我編寫測試用例的測試用具類。我也使用了包括守衛,以阻止多個包含。
任何想法是什麼事?
非常感謝!
忘記提及,在類Test中,**'a'是我用來比較對象的整數**值。 – Izza 2010-05-31 09:13:49