在《数据结构、算法与应用(C++语言描述)》,第三章栈的链式实现代码,运行不成功,出现 declaration of template parameter 'T' shadows template parameter 错误。
template<typename T>
class LinkNode
{
template <typename T>
friend class LinkStack;
public:
LinkNode()
{
next=NULL;
}
private:
T data;
LinkNode<T> *next;
};
template <typename T>
class LinkStack
{
public:
LinkStack();
~LinkStack();
bool IsEmpty()const;
bool Push(const T&x);
bool Top(T&x);
bool Pop(T&x);
void OutPut(ostream &out)const;
private:
LinkNode<T> *top; //栈顶指针
int size; //栈中元素个数
};
主要错误在class LinkNode中,因为同时出现的两个template
把LinkNode类的T改为U就可以了,注意:友元类的T不用改。
更改代码如下:
template<typename U>
class LinkNode
{
//注意这里的T不用改
template <typename T>
friend class LinkStack;
public:
LinkNode()
{
next=NULL;
}
private:
U data;
LinkNode<U> *next;
};
template <typename T>
class LinkStack
{
public:
LinkStack();
~LinkStack();
bool IsEmpty()const;
bool Push(const T&x);
bool Top(T&x);
bool Pop(T&x);
void OutPut(ostream &out)const;
private:
LinkNode<T> *top; //栈顶指针
int size; //栈中元素个数
};