I am very new to C++. I was working through following example from here. I am getting expected a declaration
error in line friend LinkedQueue<T>;
. My understanding is that I need to use a statement like friend TYPE LinkedQueue<T>;
. Is the code posted on the website wrong?
C++ program to implement Queue using Linked Representation
#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;
}
Thanks.