有模板高手帮忙解决个问题!

zzybird 2008-07-03 01:55:28
我想在模板类中使用另一模板类型声明的结构体,可编译不通过,
哪位大侠有解决办法?代码如下

#include "stdafx.h"
#include <Windows.h>
#include <set>
using namespace std;

template<class eType>
struct ZElement
{
eType* Element;
ZElement* Next;
ZElement* Prev;
};

template<class ElementType>
class ZList
{
public:
ZList(void);
virtual ~ZList(void);
ElementType* ZNew();
private:
DWORD m_dwListMaxCount;
DWORD m_dwListNowCount;

ZElement<ElementType>* m_pListHead;
ZElement<ElementType>* m_pListTrail;

ZElement<ElementType>* m_pEmptyListHead;
ZElement<ElementType>* m_pEmptyListTrail;
set<DWORD> m_setListIndex;

};

template<class ElementType>
ZList<ElementType>::ZList(void):m_dwListMaxCount(0),m_dwListNowCount(0),m_pListHead(NULL),m_pListTrail(NULL),
m_pEmptyListHead(NULL),m_pEmptyListTrail(NULL)
{
}

template<class ElementType>
ElementType* ZList<ElementType>::ZNew()
{
if(m_dwListNowCount < m_dwListMaxCount)
{
ZElement<ElementType>* pZElement = m_pEmptyListHead;
ZeroMemory(pZElement->Element,sizeof(pZElement->Element));
if (m_dwListNowCount == 0)
m_pListHead = m_pEmptyListHead;
m_pListTrail->Next = m_pEmptyListHead;
m_pEmptyListHead->Prev = m_pListTrail;
m_pListTrail = m_pEmptyListHead;
m_pEmptyListHead = m_pEmptyListHead->Next;
pZElement->Next = NULL;
m_setListIndex.insert((DWORD)&pZElement);
m_dwListNowCount++;
return pZElement->Element;
}
else
{
ZElement<ElementType>* pZElement = new ZElement<ElementType>;
if (pZElement != NULL)
{
pZElement->Element = new ElementType;
pZElement->Next = NULL;
pZElement->Prev = m_pEmptyListTrail;
if (m_dwListNowCount==0)
m_pListHead = pZElement;
m_pListTrail->Next = pZElement;
m_pListTrail = pZElement;
m_dwListNowCount++;
m_dwListMaxCount++;
return pZElement->Element;
}
else
return NULL;
}
}

int _tmain(int argc, _TCHAR* argv[])
{
ZList<int> aZList;
int* a = aZList.ZNew();
return 0;
}


错误为:
1>TestZList.obj : error LNK2019: 无法解析的外部符号 "public: virtual __thiscall ZList<int>::~ZList<int>(void)" (??1?$ZList@H@@UAE@XZ),该符号在函数 _wmain 中被引用

...全文
70 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
K行天下 2008-07-03
  • 打赏
  • 举报
回复
没有实现析构函数

template <class ElementType>
ZList<ElementType>::~ZList()
{
;//实现,释放内存!!
}


另外这个函数有误,改了下

template <class ElementType>
ElementType* ZList <ElementType>::ZNew()
{
if(m_dwListNowCount < m_dwListMaxCount)
{
cout<<"df"<<endl;
ZElement <ElementType>* pZElement = m_pEmptyListHead;
ZeroMemory(pZElement->Element,sizeof(pZElement->Element));
if (m_dwListNowCount == 0)
m_pListHead = m_pEmptyListHead;
m_pListTrail->Next = m_pEmptyListHead;
m_pEmptyListHead->Prev = m_pListTrail;
m_pListTrail = m_pEmptyListHead;
m_pEmptyListHead = m_pEmptyListHead->Next;
pZElement->Next = NULL;
m_setListIndex.insert((DWORD)&pZElement);
m_dwListNowCount++;

return pZElement->Element;
}
else
{

ZElement <ElementType>* pZElement = new ZElement <ElementType>;
if (pZElement != NULL)
{

pZElement->Element = new ElementType;

pZElement->Next = NULL;
pZElement->Prev = m_pEmptyListTrail;

if (m_dwListNowCount==0)
m_pListHead = pZElement;

m_pListTrail = pZElement;
m_pListTrail->Next = pZElement;


m_dwListNowCount++;
m_dwListMaxCount++;

return pZElement->Element;
}
else
return NULL;
}
}

ouyh12345 2008-07-03
  • 打赏
  • 举报
回复
~ZList的函数体呢?
taodm 2008-07-03
  • 打赏
  • 举报
回复
提示很清楚啊,你没实现析构函数。

65,204

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧