2017-11-05 12 views
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ポインタを使用しています。それが意味するものは本当に分かっていませんが、ノードを正しく作成しているかどうかを本当に知りたいです。あなたが貢献できるものをありがとう。

答えて

0

このを指すことはできません。

はたとえば、あなたが

temp->this->item(newEntry); 

これを行うための正しい方法を書いた

temp->item(newEntry); 
+0

は正直に言うと、私も本当にこのポインタを使用する方法がわからないです。私はあなたが親クラスの関数にアクセスしようとしているときにそれを使用しなければならないと思っていましたが、クラスでそれを使う方法を実際には踏まなかったのです。私はこれを試してみましょう、ありがとう! @helper – Sam

+0

@Samここに「this」に関するドキュメントがあります。上半分は火星で書かれているように読み込まれますので、例にスキップしてから、上の例に戻ってください。 – user4581301

+0

@Sam 'this'はプログラム内の現在の 'location'へのポインタです。つまり、オブジェクトのメソッドに入っていれば' this'はそのオブジェクトへのポインタです。 'temp'はすでに' DoubleNode'オブジェクトへのポインタです。このオブジェクトを使ってそのプロパティとメソッドを参照することができます。すでにオブジェクトへのポインタ( 'temp')があるので' this'への呼び出しは必要ありません。 (また、あなたは、あなたがとにかくしたいと思うように働くための正しいコンテキストではありません。)そして、user45 ...が示唆するように、いくつかの例を見ることは素晴らしい考えです! – helper

関連する問題