堆栈模板不能编译push func

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

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的指针吗?


您需要前缀名称Elementtypename

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

这是一个完整解释为什么这是必要的链接

  • http://pages.cs.wisc.edu/~driscoll/typename.html

  • 你也应该考虑使用

    const T &n = T()
    

    代替

    const T &n = 0
    

    由于不是所有可能的T都可以从0初始化!

    链接地址: http://www.djcxy.com/p/59561.html

    上一篇: stack template doesn't compile push func

    下一篇: Resolve absolute path from relative path and/or file name