1
二重リンクリストプログラムを終了しようとしていますが、クラスを使用してノードを作成する方法はわかりません。私は今までsctructsを使ってきました。クラスからノードを作成するにはどうすればよいですか?
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;
}
これらの2つのファイルは私の教授によって提供された、と私は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;
}
は、私はエラーの多くを得る、の大部分はあらゆる場所に「『この』前に修飾されていないIDを期待」しています私はthis
ポインタを使用しています。それが意味するものは本当に分かっていませんが、ノードを正しく作成しているかどうかを本当に知りたいです。あなたが貢献できるものをありがとう。
は正直に言うと、私も本当にこのポインタを使用する方法がわからないです。私はあなたが親クラスの関数にアクセスしようとしているときにそれを使用しなければならないと思っていましたが、クラスでそれを使う方法を実際には踏まなかったのです。私はこれを試してみましょう、ありがとう! @helper – Sam
@Samここに「this」に関するドキュメントがあります。上半分は火星で書かれているように読み込まれますので、例にスキップしてから、上の例に戻ってください。 – user4581301
@Sam 'this'はプログラム内の現在の 'location'へのポインタです。つまり、オブジェクトのメソッドに入っていれば' this'はそのオブジェクトへのポインタです。 'temp'はすでに' DoubleNode'オブジェクトへのポインタです。このオブジェクトを使ってそのプロパティとメソッドを参照することができます。すでにオブジェクトへのポインタ( 'temp')があるので' this'への呼び出しは必要ありません。 (また、あなたは、あなたがとにかくしたいと思うように働くための正しいコンテキストではありません。)そして、user45 ...が示唆するように、いくつかの例を見ることは素晴らしい考えです! – helper