template语法问题,解决后立刻揭帖。请稍微用1分钟,帮助一个新手。您获得的不止是感激。

KissXYL 2005-11-09 10:06:48
类的声明如下:
template<typename T>
class CMyLinkList
{
public:
T data;
static CMyLinkList* pHead;
CMyLinkList* pPrev;
CMyLinkList* pNext;
public:
static CMyLinkList* CreateLinkList();
static CMyLinkList* DeleteLinkList();
CMyLinkList(CMyLinkList*LPPREV,T data);
};

实现部分很简单,略……

我在使用这个类的时候,出问题了。因为pHead是静态对象,我需要在main之外赋值,按书上提示,我这样写:CMyLinkList<int> g_Head(NULL,1);没有问题,可以。但是,我如何动态的生成对象呢?逼近链表的每个元素都需要new出来,否则函数结束,链表就成了断的了。如何写,请教语法。谢谢先。

CMyLinkList::pHead = new CMyLinkList(NULL,1);


...全文
172 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen_fu 2005-12-07
  • 打赏
  • 举报
回复
我会啦::::))))

template<class T>
class CMyLinkList
{
public:
static CMyLinkList* pHead;
CMyLinkList* pPrev;
CMyLinkList* pNext;
public:
static CMyLinkList* CreateLinkList();
static CMyLinkList* DeleteLinkList();
CMyLinkList(CMyLinkList*LPPREV, T data){};
CMyLinkList(){};
};
//CMyLinkList<int>* CMyLinkList<int>::pHead;

template<class T> T* CMyLinkList<T>::pHead = 0;

chen_fu 2005-11-09
  • 打赏
  • 举报
回复
template<class T>
class CMyLinkList
{
public:
static CMyLinkList* pHead;
CMyLinkList* pPrev;
CMyLinkList* pNext;
public:
static CMyLinkList* CreateLinkList();
static CMyLinkList* DeleteLinkList();
CMyLinkList(CMyLinkList*LPPREV, T data){};
CMyLinkList(){};
};
//CMyLinkList<int>* CMyLinkList<int>::pHead;

CMyLinkList<int> * xx = new CMyLinkList<int>(NULL, 1);

说明:模扳类不可以那样定义静态成员,只能实例化后定义静态成员,但是模扳的作用就不存在了。想别的思路吧。
KissXYL 2005-11-09
  • 打赏
  • 举报
回复
全文如下:
#include <iostream.h>
#include <stdlib.h>
#include <wtypes.h>

template<typename T>
class CMyLinkList
{
public:
T data;
static CMyLinkList* pHead;
CMyLinkList* pPrev;
CMyLinkList* pNext;
public:
static CMyLinkList* CreateLinkList();
static CMyLinkList* DeleteLinkList();
CMyLinkList(CMyLinkList*LPPREV,T data);
};

template<typename T>
CMyLinkList<T>::CMyLinkList(CMyLinkList*LPPREV,T data)
{
if (LPPREV!=NULL)// not Create new linklist now.
{
this->pPrev = LPPREV;
this->pNext = NULL;
this->pPrev->pNext = this;
}
this->data = data;
}

CMyLinkList::pHead = new CMyLinkList(NULL,1);
//CMyLinkList<int> g_Head(NULL,1);


int main()
{
system("pause");
return 1;
}
KissXYL 2005-11-09
  • 打赏
  • 举报
回复
补充一下,我写的那个不对。
xenke 2005-11-09
  • 打赏
  • 举报
回复
CMyLinkList不是普通类,它是没有成员的,只有实例化后才有成员,语法如下:CMyLinkList<int> * xx = new CMyLinkList<int>(NULL, 1);但我想这也并非你所要的结果,因为对于所有的CMyLinkList<int> 类实例是共用一个头指针的,
sinall 2005-11-09
  • 打赏
  • 举报
回复
new CMyLinkList< int >(NULL,1);

为什么将pHead定义为静态呢?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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