C++ 如何从类创建节点?
试图完成我的双链表程序,但我真的不知道如何使用类创建节点。我只使用过卡车 DoubleNode.h: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;
#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。。。建议,看一些例子是一个好主意@帮手非常感谢,这就更有意义了。