Я реализовал простую карту STL в C ++. Вычислил сравнение как тип, как мне было приказано, затем осуществил сравнение, как показано ниже:
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 - это два ключа, которые я сравниваю. Это хорошо работает для всех основных типов данных и строк. Я добавил шаблонную специализацию для сравнения ключей определенного пользователем типа с именем 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 () (класс Test, класс 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 - это класс тестового набора, в котором я написал тестовый пример. Я также использовал include guard, чтобы остановить несколько включений.
Есть идеи, в чем дело ??
Большое спасибо !!