2016-11-03 26 views
-4

このバグの解決方法をすべて見てきましたが、何かを見つけることができませんでした。ここで左に '。' LinkedList実装でクラス/構造体/共用体が必要です。実装

は、エラーが発生するコードです:

template<typename DataType> 
class LinkedList { 
Node<DataType> *headNode; 
Node<DataType> *tailNode; 
Node<DataType> currentNode; 

/// Other functions declared 
}; 

template<typename DataType> 
void LinkedList<DataType>::addAtIndex(DataType data, int index) 
{ 
    if (index < 0 || index >= size) { 
     throw LinkedListBoundsException(); 
    } 
    if (index == 0) { 
     addToBeginning(data); 
    } else if(index == size - 1){ 
     addToEnd(data); 
    } else { 
     Node<DataType> *nodeBefore = headNode; 
     Node<DataType> *nodeAfter = tailNode; 
     Node<DataType> node = Node<DataType>(data); 
     for (int i = 0; i < index - 1; i++) { 
      nodeBefore = headNode.getNext(); 
     } 
     nodeAfter = nodeBefore.getNext(); 
     nodeBefore.setNext(node); 
     nodeAfter.setPrevious(node); 
     node.setPrevious(nodeBefore); 
     node.setNext(nodeAfter); 
     size++; 
    } 
} 

そして、私のNode.h

#pragma once 
#include <iostream> 
#include <iomanip> 
#include <string> 

using namespace std; 
template<class DataType> 
class Node 
{ 
    protected: 
     Node<DataType> *previous; 
     Node<DataType> *next; 
    public: 
     DataType data; 
     Node(); 
     Node(DataType newData); 
     Node(Node<DataType> newPrevious, DataType newData); 
     Node(DataType newData, Node<DataType> newNext); 
     Node(Node<DataType> newPrevious, DataType newData, Node<DataType> newNext); 
     ~Node(); 
     void setNext(Node<DataType> newNext); 
     void setPrevious(Node<DataType> newPrevious); 
     Node<DataType> getNext(); 
     DataType getCurrent(); 
     Node<DataType> getPrevious(); 
}; 

template<class DataType> 
Node<DataType>::Node() 
{ 
    previous = NULL; 
    data = DataType(); 
    next = NULL; 
} 

template<class DataType> 
Node<DataType>::Node(DataType newData) 
{ 
    previous = NULL; 
    data = newData; 
    next = NULL; 
} 

template<class DataType> 
Node<DataType>::Node(Node<DataType> newPrevious, DataType newData) 
{ 
    previous = newPrevious; 
    data = newData; 
    next = NULL; 
} 

template<class DataType> 
Node<DataType>::Node(DataType newData, Node<DataType> newNext) 
{ 
    previous = NULL; 
    data = newData; 
    next = newNext; 
} 

template<class DataType> 
Node<DataType>::Node(Node<DataType> newPrevious, DataType newData, Node<DataType> newNext) 
{ 
    previous = newPrevious; 
    data = newData; 
    next = newNext; 
} 

template<class DataType> 
Node<DataType>::~Node() 
{ 
    previous = NULL; 
    next = NULL; 
} 

template<class DataType> 
void Node<DataType>::setNext(Node<DataType> newNext) 
{ 
    next = newNext; 
} 

template<class DataType> 
void Node<DataType>::setPrevious(Node<DataType> newPrevious) 
{ 
    previous = newPrevious; 
} 

template<class DataType> 
Node<DataType> Node<DataType>::getNext() 
{ 
    return next; 
} 

template<class DataType> 
DataType Node<DataType>::getCurrent() 
{ 
    return data; 
} 

template<class DataType> 
Node<DataType> Node<DataType>::getPrevious() 
{ 
    return previous; 
} 

にエラーがすべてのノード/ nodeAfter/nodeBeforeにスローされることは注目に値しますメソッド。また、私はすべての代わりに - >を使用しようとするとき。私はさらに多くの誤りを受けます。

ありがとうございました!

+0

あなたが尋ねるものを除いて、他にも多くのエラーがあります。これは、オブジェクトへのポインタの代わりにオブジェクトを使用することがあるためです。 'Node :: next'メンバ変数の宣言と' Node :: setNext'関数でそれに割り当てようとしているものを見てみましょう。 –

+0

ありがとう、私はちょうどそれらをデバッグ完了しました! – JordanWx

答えて

1

あなたは他のために

nodeBefore = headNode->getNext() 

と同様に使用する必要がありますので、代わりに

nodeBefore = headNode.getNext() 

を彼らからメソッドを呼び出すためのポインタ

Node<DataType> *nodeBefore = headNode; 
Node<DataType> *nodeAfter = tailNode; 

として以下の変数を宣言しましたメソッド呼び出し。

+0

ありがとう、私はそれが何か簡単だったことを知っていた!他のコンパイラエラーが私を介して、それは今動作するようです! – JordanWx

関連する問題