描述:
类的声明如下:
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);
解决方案1:
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);
说明:模扳类不可以那样定义静态成员,只能实例化后定义静态成员,但是模扳的作用就不存在了。想别的思路吧。
CMyLinkList不是普通类,它是没有成员的,只有实例化后才有成员,语法如下:CMyLinkList<int> * xx = new CMyLinkList<int>(NULL, 1);但我想这也并非你所要的结果,因为对于所有的CMyLinkList<int> 类实例是共用一个头指针的,
解决方案3: new CMyLinkList< int >(NULL,1);
为什么将pHead定义为静态呢?