Я написал небольшой класс массива в C ++, который использует void*
для сохранения своих записей.
Теперь я хочу, чтобы он использовал шаблоны. Это мой новый заголовок:
template <typename T>
class SimpleArray
{
public:
SimpleArray();
~SimpleArray();
void SetEntry(int idx, T setEntry);
T GetEntry(int idx);
// and so on
protected:
T *pData
short iNumEntries;
}
Функции реализованы в другом файле, например:
#include "SimpleArray.h"
template <typename T>
void SimpleArray<T>::SetEntry(int idx, T setEntry)
{
// code here
}
template <typename T>
T SimpleArray<T>::GetEntry(int idx)
{
// more code here
}
Это прекрасно компилируется, но когда я хочу использовать его в каком-то другом коде, подобном этому
SimpleArray<SomeType*> cache;
cache.SetEntry(0, someThing);
Я получаю ошибку компоновщика о том, что существует unresolved external symbol
2> Thing.obj: ошибка LNK2019: неразрешенный внешний символ "public: bool __thiscall SimpleArray :: SetEntry (int, class someThing *)" (? SetEntry @? $ SimpleArray @ PAUsHandle @@@@ QAE_NHPAUsHandle @@@ Z ) упоминается в функции "public: void __thiscall Thing :: Function (int)" (? DelEntry @ Thing @@ QAEXH @ Z) * 1017 *
Чувак, я ненавижу, что компоновщик даже не пытается сказать ничего понятного.
В любом случае, настоящая проблема в том, что я сделал что-то не так, чтобы расстроить компоновщик.
Не могли бы вы сказать мне, что я сделал не так?