0
我對C++非常陌生。我正在通過here的以下示例進行工作。我得到expected a declaration
錯誤行friend LinkedQueue<T>;
。我的理解是我需要使用像friend TYPE LinkedQueue<T>;
這樣的陳述。該網站上的代碼是否發佈錯誤?朋友LinkedQueue <T>;預計聲明
C++程序使用鏈接表示
#include <iostream.h>
template<class T>
class Node
{
friend LinkedQueue<T>;
private:
T data;
Node<T> *link;
};
template<class T>
class LinkedQueue {
public:
LinkedQueue() {front = rear = 0;} // constructor
~LinkedQueue(); // destructor
int IsEmpty() const
{return ((front) ? 0 : 1);}
T First() const; // return first element
T Last() const; // return last element
LinkedQueue<T>& Add(const T& x);
LinkedQueue<T>& Delete(T& x);
private:
Node<T> *front; // pointer to first node
Node<T> *rear; // pointer to last node
};
template<class T>
LinkedQueue<T>::~LinkedQueue()
{// Queue destructor. Delete all nodes.
Node<T> *next;
while (front) {
next = front->link;
delete front;
front = next;
}
}
template<class T>
T LinkedQueue<T>::First() const
{
if (IsEmpty()) { cout<<"OutOfBounds()"; return -1; };
return front->data;
}
template<class T>
T LinkedQueue<T>::Last() const
{
if (IsEmpty()) { cout<<"OutOfBounds()"; return -1; };
return rear->data;
}
template<class T>
LinkedQueue<T>& LinkedQueue<T>::Add(const T& x)
{
Node<T> *p = new Node<T>;
p->data = x;
p->link = 0;
if (front) rear->link = p; // queue not empty
else front = p; // queue empty
rear = p;
return *this;
}
template<class T>
LinkedQueue<T>& LinkedQueue<T>::Delete(T& x)
{
if (IsEmpty()) { cout<<"OutOfBounds()"; return *this; };
x = front->data;
Node<T> *p = front;
front = front->link;
delete p;
return *this;
}
void main(void)
{
LinkedQueue<int> Q;
int x;
Q.Add(1).Add(2).Add(3).Add(4);
cout << "No queue add failed" << endl;
cout << "Queue is now 1234" << endl;
Q.Delete(x);
cout << "Deleted " << x << endl;
cout << Q.First() << " is at front" << endl;
cout << Q.Last() << " is at end" << endl;
Q.Delete(x);
cout << "Deleted " << x << endl;
Q.Delete(x);
cout << "Deleted " << x << endl;
Q.Delete(x);
cout << "Deleted " << x << endl;
cout << "No queue delete failed " << endl;
}
由於執行隊列中。
無論誰寫了這篇教程需要閱讀更多的教程。 [這個問題](http://stackoverflow.com/questions/2976477)提示該代碼的日期。 –
您需要在'Node'類之前聲明'LinkedQueue'。並將'iostream.h'改爲'iostream'。 – 0x499602D2