I have following header file defines test2.h ----------> header file template<class T> class temp2 { public: temp2(); virtual ~temp2(); }; test1.h ----------> header file template<class T> class temp1 { public: temp1(temp2<T> (temp2<T> *temp2ptr); ~temp1(temp2<T> (); protected: temp2<T> *tempptr; }; test3.h -------------> header file class test3 { public: test3(); virtual ~test3(); }; template<class T> temp1<T>::temp1(temp2<T> *temp2ptr) { tempptr = temp2ptr; } main.h ----------> header file temp1 *maintemp1; temp2<test3> maintemp2; and in main.cpp -------> source file I am creating an object for this like given below maintemp1 = new temp1(&maintemp2); Now when I compile I am getting error error C2955: 'temp1' : use of class template requires template argument list can any body tell me what is the wrong with my code block ..