テンプレートスタックの実装および呼び出しに失敗しました
シーンの説明:テンプレートスタックは実装されていますが、呼び出し中に基本的な機能は実装されません.
次のように宣言します.
次のように宣言します.
template<class T>struct SNode
{
T t;
SNode<T>* pNextNode;
};
template<class T>
class CStack
{
private:
SNode<T>* m_pCStackTop;
int m_nNodeCount;
public:
CStack();
~CStack();
//
int PushStack(T t);
//
int GetTop(T& t);
//
int PopStack(T& t);
int DisplayStack();
bool IsStackNotEmpty();
};
:
#include <stdio.h>#include <stdlib.h>
#include <iostream>
using namespace std;
#include "stack.h"
template<class T>
CStack<T>::CStack()
{
//
m_pCStackTop=new SNode<T>;
if(NULL==m_pCStackTop)
{
exit(-1);
}
m_pCStackTop->pNextNode=NULL;
}
template<class T>
CStack<T>::~CStack()
{
SNode<T>* pTmpNode=m_pCStackTop;
while(NULL!=pTmpNode)
{
m_pCStackTop=pTmpNode->pNextNode;
delete pTmpNode;
pTmpNode=m_pCStackTop;
}
}
template<class T>
int CStack<T>::PushStack(T t)
{
SNode<T>* pNewNode=new SNode<T>;
pNewNode->t=t;
if(NULL==pNewNode)
{
exit(-1);
}
pNewNode->pNextNode=m_pCStackTop->pNextNode;
m_pCStackTop->pNextNode=pNewNode;
return 0;
}
template<class T>
int CStack<T>::GetTop(T &t)
{
if(NULL==m_pCStackTop->pNextNode)
{
return -1;
}
t=m_pCStackTop->pNextNode->t;
return 0;
}
template<class T>
int CStack<T>::PopStack(T &t)
{
if(NULL==m_pCStackTop->pNextNode)
{
return -1;
}
t=m_pCStackTop->pNextNode->t;
SNode<T>* pTmpNode=m_pCStackTop->pNextNode;
m_pCStackTop->pNextNode=pTmpNode->pNextNode;
delete pTmpNode;
return 0;
}
template<class T>
int CStack<T>::DisplayStack()
{
SNode<T>* pTmpNode=m_pCStackTop->pNextNode;
while((NULL!=pTmpNode))
{
pTmpNode=pTmpNode->pNextNode;
}
}
template<class T>
bool CStack<T>::IsStackNotEmpty()
{
if(NULL!=m_pCStackTop->pNextNode)
{
return true;
}
return false;
}