读书人

初学模板写了个简单的程序有有关问

发布时间: 2012-04-10 21:03:56 作者: rapoo

初学模板,写了个简单的程序,有问题
template <class T>
Node* CLinkStack<T>::Top(void)
这个地方不能通过,应该怎么写呢?

---------------------------------------------
template <class T>
class CLinkStack
{
private:
typedef struct tagNode
{
T data;
struct tagNode* next;
}Node;
public:
CLinkStack(void);
~CLinkStack(void);
public:
bool IsEmpty(void);
void Push(Node* p);
Node* Pop(void);
void Pop2(void);
Node* Top(void);
private:
Node** top;
};

template <class T>
CLinkStack<T>::CLinkStack(void)
{
top = (Node**)malloc(sizeof(Node*));
*top = NULL;
}

template <class T>
CLinkStack<T>::~CLinkStack(void)
{
Node* p = NULL;
while(!IsEmpty())
{
p = *top;
*top = p->next;
delete p;
}
p = NULL;
delete top;
top = NULL;
}

template <class T>
bool CLinkStack<T>::IsEmpty(void)
{
assert(top);
return (*top == NULL);
}

template <class T>
void CLinkStack<T>::Push(Node* p)
{
assert(top);
p->next = *top;
*top = p;
}

template <class T>
Node* CLinkStack<T>::Pop(void)
{
assert(top);
Node* p = NULL;
if(!IsEmpty())
{
p = *top;
top = &p->next;
}
return p;
}

template <class T>
void CLinkStack<T>::Pop2(void)
{
assert(top);
Node* p = Pop();
delete p;
p = NULL;
}

template <class T>
Node* CLinkStack<T>::Top(void)
{
assert(top);
Node* p = NULL;
if(!IsEmpty())
{
p = *top;
}
return p;
}


[解决办法]
Node是定义在CLinkStack 内部的,要加上作用域

C/C++ code
template  <class T> class CLinkStack { private:     typedef struct tagNode     {         T data;         struct tagNode*  next;     }Node; public:     CLinkStack(void);     ~CLinkStack(void); public:     bool IsEmpty(void);     void Push(Node* p);     Node* Pop(void);     void Pop2(void);     Node* Top(void); private:     Node** top; }; template  <class T > CLinkStack <T >::CLinkStack(void) { top = (Node**)malloc(sizeof(Node*)); *top = NULL; } template  <class T > CLinkStack <T >::~CLinkStack(void) { Node* p = NULL; while(!IsEmpty()) { p = *top; *top = p- >next; delete p; } p = NULL; delete top; top = NULL; } template  <class T> bool CLinkStack <T>::IsEmpty(void) { assert(top); return (*top == NULL); } template  <class T> void CLinkStack <T>::Push(Node* p) {     assert(top);     p->next = *top;     *top = p; } template<class T> CLinkStack<T>::Node* CLinkStack <T>::Pop(void) {     assert(top);     Node* p = NULL;     if(!IsEmpty())     {         p = *top;         top = &p->next;     }     return p; } template  <class T> void CLinkStack <T>::Pop2(void) {     assert(top);     Node* p = Pop();                                           delete p;     p = NULL; } template <class T> CLinkStack<T>::Node* CLinkStack <T>::Top(void) {              assert(top);     Node* p = NULL;     if(!IsEmpty())     {         p = *top;     }     return p; }
[解决办法]
C/C++ code
#include<stdio.h>#include<stdlib.h>#include<assert.h>template  <class T >class CLinkStack{private:    struct Node    {        T data;        Node*  next;    };public:    CLinkStack(void);    ~CLinkStack(void);    public:    bool IsEmpty(void);    void Push(Node* p);    Node* Pop(void);    void Pop2(void);    Node* Top(void);private:    Node** top;};template  <class T >CLinkStack <T >::CLinkStack(void){    top = (Node**)malloc(sizeof(Node*));    *top = NULL;}template  <class T >CLinkStack <T >::~CLinkStack(void){    Node* p = NULL;    while( !IsEmpty() )    {        p = *top;        *top = p->next;        delete p;    }    p = NULL;    delete top;    top = NULL;}template  <class T >bool CLinkStack <T >::IsEmpty(void){    assert(top);    return (*top == NULL);}template  <class T >void CLinkStack <T >::Push(Node* p){    assert(top);    p->next = *top;    *top = p;}template  <class T >typename CLinkStack<T>::Node* CLinkStack<T>::Pop(void){    assert(top);    Node* p = NULL;    if(!IsEmpty())    {        p = *top;        top = &p->next;    }    return p;}template  <class T >void CLinkStack<T>::Pop2(void){    assert(top);    Node* p = Pop();                                          delete p;    p = NULL;}template  <class T >typename CLinkStack<T>::Node*  CLinkStack<T>::Top(void){             assert(top);    Node* p = NULL;    if(!IsEmpty())    {        p = *top;    }    return p;} int main(){    CLinkStack<int> x;} 

读书人网 >C++

热点推荐