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 が比較対象の 2 つのキーです。これは、すべての基本的なデータ型と文字列でうまく機能しました。Testという名前のユーザー定義型のキーを比較するためのテンプレートの特殊化を追加し、次のように特殊化を追加しました。
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 : エラー LNK2005: "public: __thiscall KeyCompare::~KeyCompare(void)" (??1?$KeyCompare@VTest@@@@QAE@XZ) は MapTest.obj で既に定義されています
SimpleMap.obj : エラー LNK2005: "public: __thiscall KeyCompare::KeyCompare(void)" (??0?$KeyCompare@VTester@@@@QAE@XZ) は MapTest.obj で既に定義されています
MapTest.cpp は、テスト ケースを記述したテスト ハーネス クラスです。複数のインクルードを停止するために、インクルード ガードも使用しました。
何が問題なのか分かりますか??
どうもありがとうございました!!