繁体   English   中英

获取模板堆栈实现的C ++语法错误

[英]Getting a c++ syntax error for a template stack implementation

我收到此代码的语法错误,一个c2143错误,Visual Studio说该错误在类节点定义的第七行。 如果有人可以告诉我错误是什么,我就是不明白。

#include <iostream>
using namespace std;

template<class T>
class Node
{
    friend LinkedStack<T>;
    private:
    T data;
    Node<T> *link;
};
template<class T>
class LinkedStack {
    public:
        LinkedStack() {top = 0;}
        ~LinkedStack();
        int IsEmpty() const {return top == 0;}
        T Top() const;
        LinkedStack<T>& Add(const T& x);
        LinkedStack<T>& Delete(T& x);
    private:
        Node<T> *top; 
};
    template<class T>
LinkedStack<T>::~LinkedStack()
{// Stack destructor..
    Node<T> *next;
    while (top) {
        next = top->link;
        delete top;
        top = next;
    }
}
template<class T>
T LinkedStack<T>::Top() const
{// Return top element.
    if (IsEmpty()) cout<<"Stack empty:";
    else
        return top->data;
}
    template<class T>
LinkedStack<T>& LinkedStack<T>::Add(const T& x)
{// Add x to stack.
    Node<T> *p = new Node<T>;
    p->data = x;
    p->link = top;
    top = p;
    return *this;
}
    template<class T>
LinkedStack<T>& LinkedStack<T>::Delete(T& x)
{// Delete top element and put it in x.
    if (IsEmpty()) 
    {
        cout<<"Stack empty";
    return *this;
    }
    x = top->data;
    Node<T> *p = top;
    top = top->link;
    delete p;
    return *this;
}


void main(void)
{
    int x;
    LinkedStack<int> S;
    S.Add(1).Add(2).Add(3).Add(4);
    cout << "Stack should be 1234" << endl;
    cout << "Stack top is " << S.Top() << endl;
    S.Delete(x);
    cout << "Deleted " << x << endl;
    S.Delete(x);
    cout << "Deleted " << x << endl;
    S.Delete(x);
    cout << "Deleted " << x << endl;
    S.Delete(x);
    cout << "Deleted " << x << endl;
}

你有:

friend LinkedStack<T>;

不应该是:

friend class LinkedStack<T>;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM