代码之家  ›  专栏  ›  技术社区  ›  silmeth

堆栈模板未编译push func

  •  2
  • silmeth  · 技术社区  · 14 年前

    我写的这个类似于堆栈数据结构:

    template<class T>
    class Stos {
        class Element {
            public:
            T n;
            Element* prev;
            Element(const T& k = 0): n(k), prev(0) {}
        };
        Element* member;
        Stos(Stos&);
        public:
        Stos(const T&);
        ~Stos();
        unsigned int count;
        T get();
        Element* push(const T&);
        T pop();
        void mod(const T&);
    };
    

    和实现(同一文件):

    template<class T>
    Stos<T>::Stos(const T& n = 0): count(1) {
        member = new Element(n);
    }
    
    template<class T>
    T Stos<T>::get() {
        return member->n;
    }
    
    template<class T>
    Stos<T>::Element* Stos<T>::push(const T& n = 0) {
        Element* point = member;
        member = new Element;
        member->prev = point;
        if(n != 0) member->n = n;
        ++count;
        return member;
    }
    
    template<class T>
    T Stos<T>::pop() {
        Element* point = member;
        T n = point->n;
        member = point->prev;
        --count;
        delete point;
        return n;
    }
    
    template<class T>
    void Stos<T>::mod(const T& n) {
        member->n = n;
    }
    
    template<class T>
    Stos<T>::~Stos() {
        while(member) pop();
    }
    

    当我试图用g++编译它时,我得到了关于 Stos::Element* Stos::push() : expected constructor, destructor, or type conversion before ‘*’ token . 这是我第一次尝试用模板来写东西。这个堆栈代码在没有模板的情况下也能工作,当我编辑它时,我得到了错误,之前所有的工作都很好,到处都是“int”,而不是“t”。

    我不明白为什么它不能编译。我不能使用指向class::member的指针吗?

    2 回复  |  直到 14 年前
        1
  •  5
  •   JaredPar    14 年前

    Element typename

    typename Stos<T>::Element* Stos<T>::push(const T& n = 0) 
    

        2
  •  2
  •   mmmmmmmm    14 年前

    const T &n = T()
    

    const T &n = 0