#include "Node.h" template<class Type> //Error 4 error C3857: 'List': multiple template parameter lists are not allowed class List { public: List(); ~List(); void AddNode(void); private: Node<Type>* m_pNode; }; //Error 3 error C2989: 'List' : class template has already been declared as a non-class template template<class Type> List<Type>::List():m_pNode(NULL) //Error 5 error C2988: unrecognizable template declaration/definition //Error 6 error C2059: syntax error : '<' { } template<class Type> List<Type>::~List() //Error 7 error C2588: '::~List' : illegal global destructor //Error 8 fatal error C1903: unable to recover from previous error(s); stopping compilation { Node<Type>* pNode = NULL; while (m_pNode != NULL) { pNode = m_pNode; m_pNode = m_pNode->m_pNext; delete pNode; } m_pNode = NULL; } template<class Type> void List<Type>::AddNode( void ) { if (m_pNode == NULL) { m_pNode = new Node<Type>(); } else { Node* pTailNode = m_pNode; while (pTailNode->m_pNext != NULL) { pTailNode = pTailNode->m_pNext; } pTailNode->m_pNext = new Node<Type>(); pTailNode->m_pNext->m_pBefore = pTailNode; } }
template<class Type> class Node { friend class List<Type>; // Error 1 error C2059: syntax error : '<' public: Node (); //Error 2 error C2238: unexpected token(s) preceding ';' private: Type m_nData; Node<Type>* m_pNext; Node<Type>* m_pBefore; }; template<class Type> Node<Type>::Node() : m_pNext(NULL),m_pBefore(NULL) { }
#include "List.h" int _tmain(int argc, _TCHAR* argv[]) { List<int> myList; myList.AddNode(); return 0; }
template <class Type> class List;
friend List<Type>;
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)