2014-10-28 71 views
1

我對C++模板非常陌生。我目前正在開發一個項目,我需要使用模板來實現一個雙鏈表。這是目前我到目前爲止有:(C++)雙鏈表列表模板 - 訪問問題

template<class ItemType> 
class SortedList 
{ 
public: 
    SortedList(); 
    ~SortedList(); 
    bool Insert (ItemType toAdd); 
    bool Delete (ItemType toDelete); 
    void Print(); 

private: 
    SortedList (const SortedList & copyFrom); 
    SortedList & operator= (const SortedList & assignFrom); 

    struct Node 
    { 
     Node (ItemType item, Node * p = NULL, Node * n = NULL) 
     { data = item; prev = p; next = n; } 
     ItemType data; 
     Node * prev, * next; 
    }; 
    Node * list; 
}; 

template<class ItemType> 
SortedList<ItemType>::SortedList() 
{ 
    list == NULL; 
} 

template<class ItemType> 
SortedList<ItemType>::~SortedList() 
{ 
    Node * curr = list; 
    while (curr != NULL) 
    { 
     Node * tempNext = curr->next; 
     delete current; 
     current = tempNext; 
    } 
} 

然而,在我的析構函數,例如,爲什麼我不能訪問節點元素?現在編譯該方法內的代碼,但不會拋出錯誤。但是,如果我嘗試使用 - >在curr上,next或prev不會出現。爲什麼我無法訪問這些?我覺得我缺少一些非常明顯的東西來開始。

另外,我怎麼能初始化函數頭中的列表== NULL,而不是在類之外呢?

+0

有在構造一個錯字。它應該是list = NULL;你不使用==來初始化,而是進行比較。 – 2014-10-28 05:39:59

回答

0
  1. 不知道爲什麼它編譯,但使用的是

delete current; current = tempNext;

相反的:

delete curr; 
curr = tempNext; 
  • 使用內嵌初始化語法:
  • class SortedList { public: SortedList() : list(nullptr) { }

  • 使用相同的語法來初始化節點(它是更優)
  • +0

    我可以直接添加任何東西到我的函數,它會成功編譯。這就是爲什麼我知道我有問題。我添加了「akasmdkamskdm」這一行,它仍然是構建的。如果我在curr上使用 - >,IntelliSense只是說「沒有成員可用」 – Dewick47 2014-10-28 05:21:49

    +0

    記住:除非實例化,否則不會編譯模板。你必須有一個'SortedList 列表;'或者編譯後的cpp中的某個地方(例如你的main.cpp) – fileoffset 2014-10-28 05:23:36

    +0

    好的,我做到了,在編譯期間它會顯示錯誤。但是,智能感知不會在不正確的語句中顯示紅線(我認爲這是出於同樣的原因?) 雖然這仍然不能解決我的問題 - > – Dewick47 2014-10-28 05:26:13