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. Если компилировать отдельно - ошибки нет.


Ответы (0 шт):