(C ++)双链表模板 - 访问问题

时间:2014-10-28 05:03:54

标签: c++ templates doubly-linked-list

我是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;
   }
}

但是,在我的析构函数中,为什么我不能访问节点元素?现在正在编译该方法内部的代码,但不会抛出错误。但是,如果我尝试使用 - &gt;在curr,next或prev不会出现。为什么我无法访问这些?我觉得我错过了一些非常明显的事情来开始。

另外,如何在函数头中初始化list == NULL,而不是在类之外进行?

1 个答案:

答案 0 :(得分:0)

  1. 不知道为什么编译,但你正在使用
  2. delete current; current = tempNext;

    而不是:

    delete curr;
    curr = tempNext;
    
    1. 使用内联初始化程序语法:
    2. class SortedList { public: SortedList() : list(nullptr) { }

      1. 使用相同的语法初始化Node(它更优化)