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