2015-06-21 74 views
1

我有一個通用的鏈接列表類,其中包含一個受保護的內部類,該類包含ListElements(節點)。在我的鏈接列表類中,我想創建一個函數,該函數返回指向給定參數前面的List-Element的指針。我無法弄清楚如何在泛型模板類中正確地定義和實現這樣的函數。返回指向受保護的內部類元素的指針

這裏是LinkedList.h代碼。

template <typename Type> 
class LinkedList 
{ 
    public: 
     LinkedList(); 
     LinkedList(const LinkedList &src); 
     ~LinkedList(); 

     void insert(const Type &item, int); 
     void remove(); 
     Type retrieve() const; 
     int gotoPrior(); 
     int gotoNext(); 
     int gotoBeginning(); 
     void clear(); 
     int empty() const; 
     void printList(); 
    protected: 
     class ListElement 
     { 
      public: 
       ListElement(const Type &item, ListElement* nextP): 
        element(item), next(nextP) {} 
       Type element; 
       ListElement* next; 
     }; 
     ListElement *head; 
     ListElement *cursor; 
}; 

我想實現這樣的功能。記住:我已經知道如何正確編碼的功能,我不知道如何界定它LinkedList.h並執行它在LinkedList.cpp

ListElement *LinkedList::ListElement getPrevious(ListElement *target){ 
    //where a list element inside the list is passed and this returns 
    //the node previous to that. 

}

+0

爲什麼要重新發明輪子。標準::名單? –

+0

這是一次學習體驗。在現實世界的應用程序中,我將使用std :: List,但現在我想了解這種情況的機制和適當的語法。 –

+0

說你已經知道如何正確編寫函數的代碼是什麼意思? –

回答

1

你不能聲明頭文件中的模板方法然後在cpp文件中實現它。模板方法必須在頭文件中實現。你可以在類中聲明你的方法,或者你可以在文件中進一步實現它們。當在類下實現時,您的示例方法看起來像這樣

template<typename Type> 
LinkedList<Type>::ListElement *LinkedList<Type>::ListElement::getPrevious(ListElement *target){ 
    //... 
}