2014-10-28 59 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