这个模板为不能运行?救救我啊 ,苦思冥想,终不得解!!

来源:百度知道 编辑:UC知道 时间:2024/05/24 05:19:20
#include<iostream>
using namespace std;
template<class T>
class CStack;
template<class T>
class CNode
{
public:
CNode(T iDate,CNode*preNode);
friend class CStack;
private:
T m_iDate;
CNode *m_preNode;
};

template<class T>
CNode<T>::CNode(T iDate,CNode*preNode)
{
m_iDate=iDate;
m_preNode=preNode;
}

template<class T>
class CStack
{
public:
CStack();
void Push(T iDate);
T Pop();
private:
CNode *m_pTop;
};
template<class T>
void CStack<T>::Push(T iDate)
{
CNode *newNode=new CNode(iDate,m_pTop);//这里是有问题的!
m_pTop=newNode;
}
template<class T>
T CStack<T>::Pop()
{
CNode*tempNode=m_pTop;
if(m_pTop)
{
m_pTop=m_pTop->m_preNode;
T tempDate=tempNode->m_iDate;
delete tempNode;

模板类的使用如下
class name<typename> objectname;
所以CNode *m_pTop; 应该是这样
CNode <T> *m_pTop;
下面的使用也要照样修改。
正确修改如下:
#include<iostream>
using namespace std;
template<class T>
class CStack;
template<class T>
class CNode
{
public:
CNode(T iDate,CNode*preNode);
friend class CStack;
public:
T m_iDate;
CNode *m_preNode;
};

template<class T>
CNode<T>::CNode(T iDate,CNode*preNode)
{
m_iDate=iDate;
m_preNode=preNode;
}

template<class T>
class CStack
{
public:
CStack();
void Push(T iDate);
T Pop();
private:
CNode<T> *m_pTop;
};
template<class T>
void CStack<T>::Push(T iDate)
{
CNode<T> *newNode=new CNode<T>(iDate,m_pTop);
m_pTop=newNode;
}
template<class T>
T CSt