unresolved external symbol C++
У меня есть проблема с реализацией делегатов в С++. Есть объявление класса делегата и класса делегата на метод объекта в Delegate.h :
class IDelegateVoid
{
public:
virtual ~IDelegateVoid() {}
virtual void Invoke() = 0;
virtual bool Compare(IDelegateVoid* pDelegate) = 0;
};
template<class TObj>
class CMethodDelegateVoid : public IDelegateVoid
{
public:
typedef void (TObj::* PMethod)();
CMethodDelegateVoid(TObj* pObj, PMethod pMethod) : m_pObj(pObj), m_pMethod(pMethod) {}
virtual void Invoke() { (m_pObj->*m_pMethod)(); }
virtual bool Compare(IDelegateVoid* pDelegate);
private:
TObj* m_pObj;
PMethod m_pMethod;
};
И создание этого делегата, описанное в Delegate.cpp :
template <class TObj>
IDelegateVoid* NewDelegate(TObj* pObj, void (TObj::* pMethod)())
{
return new CMethodDelegateVoid<TObj>(pObj, pMethod);
}
Когда я вызываю NewDelegate в данном примере
#include "Delegate.h"
#include <iostream>
class M
{
public:
void Method() { std::cout << "Method" << std::endl; }
};
int main()
{
M m;
CDelegateVoid delegate = NewDelegate(&m, &M::Method);
delegate(); //В этом месте CDelegateVoid должен вызывать M::Method
}
, при билде проекта выдаёт ошибку
error LNK2019: unresolved external symbol "class IDelegateVoid * __cdecl NewDelegate<class M>(class M *,void (__thiscall M::*)(void))" (??$NewDelegate@VM@@@@YAPAVIDelegateVoid@@PAVM@@P81@AEXXZ@Z) referenced in function _main. Если компилировать отдельно - ошибки нет.