error C2955: “CTemplateList”: 使用类 模板 需要 模板 参数列表
#pragma once
// CTemplateList
template<class T1, class T2>
class CTemplateList : public CListCtrl
{
DECLARE_DYNAMIC(CTemplateList)public:
CTemplateList();
virtual ~CTemplateList();protected:
DECLARE_MESSAGE_MAP()public:
T1 m_t1;
T2 m_t2;
};
// TemplateList.cpp : 实现文件
//#include "stdafx.h"
#include "TplList.h"
#include "TemplateList.h"
// CTemplateListIMPLEMENT_DYNAMIC(CTemplateList, CListCtrl) //这个地方报错CTemplateList::CTemplateList()
{}CTemplateList::~CTemplateList()
{
}
BEGIN_MESSAGE_MAP(CTemplateList, CListCtrl) //这个地方报错
END_MESSAGE_MAP()// CTemplateList 消息处理程序
#pragma once
// CTemplateList
template<class T1, class T2>
class CTemplateList : public CListCtrl
{
DECLARE_DYNAMIC(CTemplateList)public:
CTemplateList();
virtual ~CTemplateList();protected:
DECLARE_MESSAGE_MAP()public:
T1 m_t1;
T2 m_t2;
};
// TemplateList.cpp : 实现文件
//#include "stdafx.h"
#include "TplList.h"
#include "TemplateList.h"
// CTemplateListIMPLEMENT_DYNAMIC(CTemplateList, CListCtrl) //这个地方报错CTemplateList::CTemplateList()
{}CTemplateList::~CTemplateList()
{
}
BEGIN_MESSAGE_MAP(CTemplateList, CListCtrl) //这个地方报错
END_MESSAGE_MAP()// CTemplateList 消息处理程序
template<class T1,class T2> CListTemplate<T1,T2>::CListTemplate()
{
}BEGIN_MESSAGE_MAP END_MESSAGE_MAP
定义的是宏,里面是函数与数组的定义.要按照上面的格式写.由于模板的写法复杂,我找不到把模板写进这个消息映射的宏里的方法,只好自己重写了一下.
//这些内容相当于BEGIN_MESSAGE_MAP
template<class T1,class T2> const AFX_MSGMAP* CListTemplate<T1,T2>::GetMessageMap() const
{return &CListTemplate<T1,T2>::messageMap;}
template<class T1,class T2> AFX_COMDAT AFX_DATADEF const AFX_MSGMAP
CListTemplate<T1,T2>::messageMap =
{ &CListTemplate::messageMap, &CListTemplate::_messageEntries[0] };template<class T1,class T2> AFX_COMDAT const AFX_MSGMAP_ENTRY CListTemplate<T1,T2>::_messageEntries[] =
{
//{{AFX_MSG_MAP(CListTemplate)
// NOTE - the ClassWizard will add and remove mapping macros here.
//中间加消息映射 //}}AFX_MSG_MAP//下面的内容相当于END_MESSAGE_MAP
{0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }
};
然后我又照着做,再把 xxxx.cpp 上面的 static char THIS_FILE[] = __FILE__; 变量定义删掉.
编译又成功了一些,但又报另外的错误,说我在MESSAGE_MAP的写法有误.
cannot convert from 'const struct AFX_MSGMAP *' to 'const struct AFX_MSGMAP *(__stdcall *)(void)'
现在还没查到写错了哪些.错是出在这里
CListTemplate<T1,T2>::messageMap =
{ &CListTemplate::messageMap, &CListTemplate::_messageEntries[0] };
我一开始是写错了,但我现在改成这样.
template<class T1,class T2> AFX_COMDAT AFX_DATADEF const AFX_MSGMAP
CListTemplate<T1,T2>::messageMap =
{ &CListCtrl::messageMap, &CListTemplate<T1,T2>::_messageEntries[0] };
仍然是报那个错误.
template<class T1,class T2> const AFX_MSGMAP* PASCAL
CListTemplate<T1,T2>::_GetBaseMessageMap()
{
return &CListCtrl::messageMap;
}template<class T1,class T2> const AFX_MSGMAP*
CListTemplate<T1,T2>::GetMessageMap() const
{
return &CListTemplate<T1,T2>::messageMap;
}template<class T1,class T2> AFX_COMDAT AFX_DATADEF const AFX_MSGMAP
CListTemplate<T1,T2>::messageMap = {
&CListTemplate<T1,T2>::_GetBaseMessageMap,
&CListTemplate<T1,T2>::_messageEntries[0]
};template<class T1,class T2> AFX_COMDAT const AFX_MSGMAP_ENTRY
CListTemplate<T1,T2>::_messageEntries[] =
{
//{{AFX_MSG_MAP(CListTemplate)
// NOTE - the ClassWizard will add and remove mapping macros here.
//中间加消息映射
//}}AFX_MSG_MAP
//下面的内容相当于END_MESSAGE_MAP
{0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 },
};
终于写好了,原来之前是抄错了BEGIN_MESSAGE_BOX的宏定义,赋值处出错了.
楼主,留个QQ,传个工程给你试试吧.你的意思是不是,你写的这个List模板,不是在一个程序上用的,可能是很多个程序,每个都有自己的特别的数据的,所以要搞模板?