在《數據結構、算法與應用(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; //棧中元素個數
};