双链接列表模板没有智能感知

时间:2014-10-28 13:10:01

标签: c++ templates visual-studio-2013 intellisense

我是C ++模板的新手,我正在开发一个项目,我需要使用模板实现双向链接列表。但是,我似乎无法访问下一个和之前的节点元素。

例如,在我的析构函数中,我不能使用curr->提出我使用next或prev的选项。 IntelliSense只是说,“没有会员可用。”此外,我只能在构建时发现错误...没有红线,警告,任何事先出现。我很好奇为什么这不起作用......这是一个错误还是打算?如果是,到目前为止我的模板在哪里不正确?

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 curr;
      curr = tempNext;
   }
}

1 个答案:

答案 0 :(得分:0)

Node结构放在SortedList之外,如下所示:

template<typename ItemType>
struct Node
{
    Node(ItemType item, Node * p = NULL, Node * n = NULL)
    {
        data = item; prev = p; next = n;
    }
    ItemType data;
    Node * prev, *next;
};

然后在SortedList内实例化模板(创建类型),如下所示:

template<class ItemType>
class SortedList
{
public:
    //... More code here.

private:
    // ... More code here.
    Node<ItemType> * list;
};

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

template<class ItemType>
SortedList<ItemType>::~SortedList()
{
    Node<ItemType> *curr = list;

    while (curr != NULL)
    {
        Node * tempNext = curr->next; // Now this will work.
        delete curr;
        curr = tempNext;
    }
}

我遵循的逻辑

模板,不是类型。您将获得实例化模板的类型。因此,类型Node在您实例化模板StortedList之前不存在,因为前者位于后者内部。

Node的确切类型也是SortedList<ItemType>::Node,在编译代码之前,您可以看到无法谈论Node。这就是为什么IntelliSense不“看到它”。