2011-12-09 30 views
0

我得到一个语法错误此代码,C2143错误,在Visual Studio说,错误是在类节点定义中的第7行。 如果有人可以请告诉我什么是错误,我只是不明白。得到一个C++语法错误模板堆栈实现

#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; 
} 
+3

...和完整的错误是什么?一般来说,你想要包括你得到的确切的错误,而不是你自己的描述。 – Bart

+7

'无效main' ...:“( – AusCBloke

+0

'主(无效)'...:”( – 2011-12-09 21:26:16

回答

3

您有:

friend LinkedStack<T>; 

它不应该是:

friend class LinkedStack<T>; 

+0

不知道为什么这个答案是downvoted,这是正确的,同时,我不会赌@ parapura的一个 – psycho

+0

MSVC允许“类”被省略这不是真正的法律,虽然 – StilesCrisis

+0

@StilesCrisis:。!THX我与G ++测试所以这实际上是答案的一部分我。在我看来(我不知道这是否是你的票,所以并不觉得有针对性的),一个downvote应始终遵循一个注释说明原因。 – psycho