2014-09-18 116 views
-1

我想創建一個鏈表類,它使用一個節點類作爲列表中的節點(下一個節點,數據)。鏈接列表類用作包含成員函數的列表頭,並且可以與任何數據類型(即模板)一起使用。我很難理解模板如何在類聲明和成員函數實現中工作。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] 

我在做模板對象類型傳遞錯誤或者是別的什麼?謝謝

+0

這有什麼好做的模板。 'T x(a,b);'在棧上傳遞'a'和'b'給構造函數; 'T * px = new T(a,b);'在堆上傳遞'a'和'b'到構造函數的'T'。 'T * px(a,b);'是一個科學怪人的混亂,這是一個語法錯誤。 – 2014-09-18 21:05:36

+0

啊,我現在看到了,謝謝。 – Evan 2014-09-18 21:45:16

回答

2

行:

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

應該是:

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