Я новичок в этом шаблоне классов C ++. Что я тут не так делаю?
scrollbars.h
файл:
namespace Scrollbars
{
template <typename T>
class CScrollbars : public T
{
public:
CScrollbars();
~CScrollbars();
};
};
scrollbars.cpp
файл:
#include "Scrollbars.h"
namespace Scrollbars
{
template<class T>
CScrollbars<T>::CScrollbars()
{
//Constructor
}
template<class T>
CScrollbars<T>::~CScrollbars()
{
//Destructor
}
};
Все приведенные выше шаблоны предназначены для того, чтобы я мог получить их базовый класс из различных других классов. Например, в приведенном ниже классе я хочу, чтобы CFancyEdit
был получен из CScrollbars
, который, в свою очередь, должен быть производным от произвольного класса, в данном случае CRichEditCtrl
, но может быть любым другим классом:
FancyEdit.h
файл:
namespace FancyEdit
{
using namespace Scrollbars;
//Derive it from the MFC class CRichEditCtrl
class CFancyEdit : public CScrollbars<CRichEditCtrl>
{
public:
CFancyEdit();
~CFancyEdit();
};
};
FancyEdit.cpp
файл:
#include "FancyEdit.h"
namespace FancyEdit
{
CFancyEdit::CFancyEdit()
{
//Constructor
}
CFancyEdit::~CFancyEdit()
{
//Destructor
}
};
Он компилируется нормально, но выдает мне следующие ошибки компоновщика:
1>FancyEdit.obj : error LNK2019: unresolved external symbol "public: __cdecl Scrollbars::CScrollbars<class CFancyEdit>::CScrollbars<class CFancyEdit>(void)" referenced in function "public: __cdecl FancyEdit::CFancyEdit::CFancyEdit(void)"
1>FancyEdit.obj : error LNK2019: unresolved external symbol "public: virtual __cdecl Scrollbars::CScrollbars<class CFancyEdit>::~CFancyEdit<class CFancyEdit>(void)" referenced in function "int `public: __cdecl FancyEdit::CFancyEdit::CFancyEdit(void)'::`1'::dtor$0"