Хорошо, я определил класс шаблона, который компилируется, как и ожидалось, когда я реализую этот класс в функции CMainFrame приложения и скомпилирую его, я получаю неразрешенные ошибки компоновки.
void CMainFrame::OnFunc()
{
CTestList<CMyClass> list;
}
Ошибки компоновки:
1>mainfrm.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall CTestList<class CMyClass>::~CTestList<class CMyClass>(void)" (??1?$CTestList@VCWnd@@@@UAE@XZ) referenced in function "protected: void __thiscall CMainFrame::OnFunc(void)" (?OnFunc@CMainFrame@@IAEXXZ)
1>mainfrm.obj : error LNK2019: unresolved external symbol "public: __thiscall CTestList<class CMyClass>::CTestList<class CMyClass>(void)" (??0?$CTestList@VCWnd@@@@QAE@XZ) referenced in function "protected: void __thiscall CMainFrame::OnFunc(void)" (?OnFunc@CMainFrame@@IAEXXZ)
Я проверил все очевидные пропущенные заголовки, неопределенные функции и т. Д., Но все равно выдает эти ошибки мне, все файлы являются частью основного приложения и не находятся вstatic / shared libs, так как это ошибка, которую я ожидал бы, если бы сделал это ..
Вот базовое определение класса шаблона, сокращенное, я следовал тому, что я считаюправильный путь в построении класса, и все мои исследования, кажется, указывают на его правильность.
Действительно нужно получить этот прибитый как можно скорее, так что если вы, ребята и девушки, могли бы помочь, я был бы очень признателен.
Ура, DIGGIDY
/////////////////////////////////////////////////////////////////////////////
// CTestList class
template <class T>
class CTestList : public CMDIChildWndEx
{
//DECLARE_DYNAMIC(CTestList<T>)
public:
CTestList();
virtual ~CTestList();
protected:
// Generated message map functions
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// CTestList
//IMPLEMENT_DYNCREATE(CTestList<SDCM_OBJECT_TYPE>, CMDIChildWndEx)
template <class T>
CTestList<T>::CTestList()
{
}
template <class T>
CTestList<T>::~CTestList()
{
}
BEGIN_TEMPLATE_MESSAGE_MAP(CTestList, T, CMDIChildWndEx)
ON_WM_CREATE()
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTestList message handlers
template <class T>
int CTestList<T>::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if ( CMDIChildWndEx::OnCreate(lpCreateStruct) == -1 )
return -1;
// this removes the crappy un-drawn client edge on screen
ModifyStyleEx(WS_EX_OVERLAPPEDWINDOW, WS_EX_WINDOWEDGE);
return 0;
}