Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从类创建节点?_C++_Linked List - Fatal编程技术网

C++ 如何从类创建节点?

C++ 如何从类创建节点?,c++,linked-list,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;

试图完成我的双链表程序,但我真的不知道如何使用类创建节点。我只使用过卡车

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
\ifndef双节点_
#定义双节点_
模板
类双节点
{
私人:
项目类型项目;
双节点*prev;
双节点*下一步;
公众:
DoubleNode(const ItemType&anItem、DoubleNode*prevPtr、DoubleNode*nextPtr);
~DoubleNode();
ItemType getItem()常量;
DoubleNode*getPrev()常量;
DoubleNode*getNext()常量;
void setPrev(双节点*prevPtr);
void setNext(双节点*nextPtr);
};
#恩迪夫
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;
}
#包括“DoubleNode.h”
模板
DoubleNode::DoubleNode(常量ItemType&anItem、DoubleNode*prevPtr、DoubleNode*nextPtr):
项目(anItem)、上一个项目(上一个项目)、下一个项目(下一个项目)
{
}
模板
DoubleNode::~DoubleNode()
{
this->prev=this->next=nullptr;
}
模板
ItemType DoubleNode::getItem()常量
{
返回此->项目;
}
模板
DoubleNode*DoubleNode::getPrev()常量
{
返回此->上一步;
}
模板
DoubleNode*DoubleNode::getNext()常量
{
返回此->下一步;
}
模板
void DoubleNode::setPrev(DoubleNode*prevPtr)
{
此->prev=prevPtr;
}
模板
void DoubleNode::setNext(DoubleNode*nextPtr)
{
此->下一步=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;
}
模板
bool DoubleList::insertFront(const ItemType和newEntry)
{
DoubleNode*n;//创建指向节点的指针
双节点*头;
双节*尾;
//如果列表为空,则这是第一个节点
如果(itemCount==0){
n=新的DoubleNode;//正在创建节点
n->this->item(newEntry);//将项放入节点
n->prev=NULL;//第一个节点,因此prev为NULL
head=n;//head和tail都在这个节点上
尾=n;
itemCount++;//递增itemCount
}
否则{
DoubleNode*temp=new node;//创建一个新节点
临时->此->项目(新条目);
temp->this->setPrev(head->this->getPrev());//将prev设置为head指针的prev
temp->this->getNext()=this->head;//指向头部的下一个点
head->this->getPrev()=temp;//将旧head节点的prev指向新创建的节点
head=temp;//temp是新的head
delete temp;//删除临时指针
温度=零;
itemCount++;//增量intemCount
}
返回true;
}

当我运行这个时,我会遇到很多错误,其中大多数错误都是在我使用
this
指针的每个地方出现的“在'this'之前预期的非限定id”。我也不知道这意味着什么,但我很想知道我是否正确地创建了节点。感谢您所做的一切。

您不能指向

比如,你写了

temp->this->item(newEntry);
正确的方法是

temp->item(newEntry);

您不能指向此

比如,你写了

temp->this->item(newEntry);
正确的方法是

temp->item(newEntry);

老实说,我甚至不知道如何使用这个指针。我认为当您试图从父类访问函数时必须使用它,但我们实际上从未讨论过如何在类中使用它。我试试看,谢谢@helper@Sam下面是一些有关此的文档。上半部分的读起来就像是用火星语写的,所以跳到下面的例子,一旦你掌握了这些例子所教的内容,再回到上半部分。@Sam
这个
是指向程序中当前“位置”的指针——所以如果我们在一个对象的方法中,那么
这个
就是指向该对象的指针
temp
已经是指向
DoubleNode
对象的指针,您可以使用该对象引用其属性和方法。不需要调用
this
,因为您已经有了指向该对象的指针(
temp
)。(另外,您不适合
这个
以您想要的方式工作。)并且作为用户45。。。建议,看一些例子是一个好主意@助手非常感谢,这更有意义。老实说,我甚至不知道如何使用这个指针。我认为当您试图从父类访问函数时必须使用它,但我们实际上从未讨论过如何在类中使用它。我试试看,谢谢@helper@Sam下面是一些有关此
的文档。上半部分的读起来就像是用火星语写的,所以跳到下面的例子,一旦你掌握了这些例子所教的内容,再回到上半部分。@Sam
这个
是指向程序中当前“位置”的指针——所以如果我们在一个对象的方法中,那么
这个
就是指向该对象的指针
temp
已经是指向
DoubleNode
对象的指针,您可以使用该对象引用其属性和方法。不需要调用
this
,因为您已经有了指向该对象的指针(
temp
)。(另外,您不适合
这个
以您想要的方式工作。)并且作为用户45。。。建议,看一些例子是一个好主意@帮手非常感谢,这就更有意义了。