declaration of template parameter 'T' shadows template parameter 錯誤


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM