左边的'。'必须在LinkedList Implementation

时间:2016-11-03 15:50:01

标签: c++ visual-studio

我已经全神贯注地找到了这个bug的解决方案,但我找不到任何东西。

以下是导致错误的代码:

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方法都会抛出错误。当我尝试全部使用时 - >代替 。我收到了更多的错误。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您已将以下变量声明为指针

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

所以从它们调用方法而不是

nodeBefore = headNode.getNext()

你应该使用

nodeBefore = headNode->getNext()

和其他方法调用类似。