Self explanitory... I am getting access violations. It is close to working but alas...

QUEUE.H

Code:

#ifndef QUEUE_H
#define QUEUE_H

const int MAX = 5;


template <class T> struct node{
	T value;
	node<T>* ptr;
};


template <class T> class queue{

	private:
		int counter;
		node<T>* head;
		node<T>* tail;
	
	public:
		queue();
		int count();
		void enqueue(T newtop);
		T dequeue();
		T onTop();	
		bool isEmpty();  
		bool isFull();	   
};


template <class T> queue<T>::queue(){
	counter = 0; 
	head = NULL; 
	tail = NULL;
}


template <class T> int queue<T>::count(){ 
	return counter; 	
}


template <class T> void queue<T>::enqueue(T newtop){
	node<T>* temp = new node<T>;
	//srand(time(NULL));
	
	if (!isFull()){	   
		temp->value = newtop;  //you may have to fill in other values.
		cout << "\nInserting " << temp->value << endl;
		//temp->ptr = head;
				
		//head = temp;
		
		temp = NULL;

		tail -> ptr = temp;
		
		tail = temp;
		
		counter++;
	}
	
	else
		cout << "Queue full: Cannot exceed " << MAX << " items\n";
	
}


template <class T> T queue<T>::dequeue(){
	node<T>* dummyPtr;

	if (!isEmpty()){
		counter--;
		dummyPtr = head;
		T popValue = head->value;
		head = head->ptr;

		delete dummyPtr;
		return popValue;	
	}
	
	else{
		cout << "\n<<Cannot dequeue empty queue, returning T()>>\n";
		return T();
	}	   	    
			
}		 
		 	 

template <class T> T queue<T>::onTop(){

	if (!isEmpty()){
		T peekValue = head->value;

		return peekValue;	 
	}
			 
	else{
		cout << "\n<<Cannot view top node of empty queue, returning T()>>\n";
		return T();
	
	}
			
}


template <class T> bool queue<T>::isEmpty(){

	if (counter == 0){
		return true;	
	}
			 
	else{
		return false;
	}
			
}	


template <class T> bool queue<T>::isFull(){

	if (counter == MAX){
		return true;	
	}
			 
	else{
		return false;
	}
			
}	



#endif

Next, we have the driver file

Code:
#include <iostream>
#include <conio>
#include "queue.h"
using namespace std;

int main(){
	queue<int> q;
	q.enqueue(1);
	q.enqueue(2);
	q.dequeue();
	q.enqueue(3);
	q.enqueue(4);
	q.dequeue();
    q.dequeue();
	return 0;
}





Anyone willing to help me out; I'd really appreciate it