2014-09-18 3 views
-1

노드 클래스를 노드 (다음 노드, 데이터) 노드로 사용하는 연결된 목록 클래스를 만들려고합니다. Linked List 클래스는 멤버 함수를 포함하고 모든 데이터 유형 (즉, 템플릿)과 함께 사용할 수있는 목록의 헤더 역할을합니다. 클래스 선언 및 멤버 함수 구현 내에서 템플릿이 작동하는 방식을 이해하는 데 어려움을 겪고 있습니다.C++ 템플릿 클래스 멤버 함수, 다른 템플릿 클래스 의존

내가 링크 된 목록이 개 템플릿 클래스가 (여기에는 관련 부분입니다) : 컴파일에

template<typename NodeObjectType> 
class ListNode 
{ 
public: 
    NodeObjectType data; 
    ListNode<NodeObjectType>* next; 
    ListNode() : next(NULL){} 
    ListNode(const NodeObjectType& item, ListNode<NodeObjectType>* nextNode = NULL) 
    { 
     data = item; 
     next = nextNode; 
    } 
}; 

template<typename ObjectType> 
class myList 
{ 
public: 
    myList() 
    { 
     Head = NULL; 
    } 

    // Other member Functions ... 


    bool contain(ObjectType x) 
    { 
     ListNode<ObjectType> *current = Head; 
     while (current != NULL) 
     { 
      if (current->data == x) 
       return true; 
      current = current->next ; // move forward one step 
     } 
     return false; 
    } 


    void add(ObjectType x) 
    { 
     if(!contain(x)) 
     { 
      ListNode<ObjectType>* NewListNode(x , Head); 
      Head = NewListNode; 
     } 
    } 

private: 
    ListNode<ObjectType>* Head; 
}; 

나는 오류

In instantiation of 'void myList<ObjectType>::add(ObjectType) [with ObjectType = int]': 
required from here 
error: expression list treated as compound expression in initializer [-fpermissive] 

내가 잘못 전달 템플릿 개체 유형을하고있는 중이 야를 얻을 아니면 다른 것입니까?

ListNode<ObjectType>* NewListNode(x , Head); 

가 있어야한다 : 당신에게

+0

이 템플릿과는 아무 상관이 없습니다. 'T x (a, b); '는 스택에서'a'와'b'를 생성자에 전달하는'T'를 만듭니다. 'T * px = new T (a, b);'는 힙에'a'와'b'를 생성자에게 건네줍니다. 'T * px (a, b); '는 구문 오류 인 Frankensteinian 엉망입니다. –

+0

아, 이제 알겠습니다. 고마워요. – Evan

답변

2

라인을 감사

ListNode<ObjectType>* NewListNode = new ListNode<ObjectType>(x , Head); 
//        ~~~~~~~~~~~~~~~~~~~~~~~~~^ 
관련 문제