如何从类创建节点?

时间:2017-11-05 01:30:32

标签: c++ linked-list

尝试完成我的双重链接列表程序,但我真的不知道如何使用类创建节点。我只使用过结构。

DoubleNode.h:

#ifndef DOUBLE_NODE_H_
#define DOUBLE_NODE_H_

template<class ItemType>
class DoubleNode
{
private:
   ItemType item;
   DoubleNode<ItemType>* prev;
   DoubleNode<ItemType>* next;

public:
   DoubleNode(const ItemType& anItem, DoubleNode<ItemType>* prevPtr, DoubleNode<ItemType>* nextPtr);
   ~DoubleNode();

   ItemType getItem() const;
   DoubleNode<ItemType>* getPrev() const;
   DoubleNode<ItemType>* getNext() const;

   void setPrev(DoubleNode<ItemType>* prevPtr);
   void setNext(DoubleNode<ItemType>* nextPtr);
};

#endif

DoubleNode.cpp:

#include "DoubleNode.h"

template<class ItemType>
DoubleNode<ItemType>::DoubleNode(const ItemType& anItem, DoubleNode<ItemType>* prevPtr, DoubleNode<ItemType>* nextPtr) :
                item(anItem), prev(prevPtr), next(nextPtr)
{
}

template<class ItemType>
DoubleNode<ItemType>::~DoubleNode()
{
    this->prev = this->next = nullptr;
}

template<class ItemType>
ItemType DoubleNode<ItemType>::getItem() const
{
   return this->item;
}

template<class ItemType>
DoubleNode<ItemType>* DoubleNode<ItemType>::getPrev() const
{
   return this->prev;
}

template<class ItemType>
DoubleNode<ItemType>* DoubleNode<ItemType>::getNext() const
{
   return this->next;
}

template<class ItemType>
void DoubleNode<ItemType>::setPrev(DoubleNode<ItemType>* prevPtr)
{
    this->prev = prevPtr;
}

template<class ItemType>
void DoubleNode<ItemType>::setNext(DoubleNode<ItemType>* nextPtr)
{
    this->next = nextPtr;
}

这两个文件是由我的教授提供的,我需要实现另一个名为DoubleListInterface.h的类。我现在正在努力,但我真的不知道我是否创造了正确的节点。

到目前为止我的DoubleList.cpp insertFront实现:

template<class ItemType>
bool DoubleList<ItemType>::insertFront(const ItemType& newEntry)
{
    DoubleNode<ItemType>* n; // Creating pointer to node
    DoubleNode<ItemType>* head;
    DoubleNode<ItemType>* tail;

    // If list is empty, this is the first node
    if (itemCount == 0){
        n = new DoubleNode<ItemType>; // Creating node
        n->this->item(newEntry); // Putting item in node

        n->prev = NULL; // First node, so prev is null
        head = n; // Both head and tail would be at this node
        tail = n;

        itemCount++; // Increment itemCount
    }
    else{
        DoubleNode<ItemType>* temp = new node; // Creating a filling new node
        temp->this->item(newEntry);

        temp->this->setPrev(head->this->getPrev()); // Set prev to the prev of head pointer
        temp->this->getNext() = this->head; // Make next point to the head
        head->this->getPrev() = temp; // Point prev of the old head node to the newly created node
        head = temp; // Temp is the new head

        delete temp; // Delete temp pointer
        temp = NULL;

        itemCount++; // Increment intemCount
    }

    return true;
}

我在运行此操作时遇到很多错误,其中大部分都是&#34;预期不合格的ID在此之前&#39;&#39;&#34;在我使用this指针的每个地方。不知道这意味着什么,但我真的想知道我是否正确创建节点。感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

您无法指向

例如,你写了

temp->this->item(newEntry);

正确的方法是

temp->item(newEntry);