This is the code wrote inOP C++ ! I don't know what error it has ? please help me !

Code:
#include <iostream.h>

template <class T>
//define struct link list
struct Node
{
	T data;
	Node<T>* link;
};

template <class T>
//class link list
class dslk
{
	private:
		Node<T>* head;
	public:
		dslk();
		~dslk();
		void addhead(T);   //add to head
		void print();
};

template <class T>
dslk<T>::dslk()
{
	head = NULL;
}

template <class T>
dslk<T>::~dslk(){}

template <class T>
dslk<T>::addhead(T key)
{
	Node<T>* NEW;
	NEW = new Node<T>;
	
	NEW->data = key;
	NEW->link = head;
	head = NEW;
}

template <class T>
dslk<T>::print()
{
	Node<T>* p = head;
	cout << "Cac phan tu trong danh sach la : ";
	while (p)
	{
		cout << p->data << "  ";
		p = p->link;
	}
}

void main(void)
{
	dslk<int> a;  // create a
	a.addhead(1);
	a.addhead(2);
	a.addhead(3);
	a.print();
}