因此,我正在使用模板,但遇到了问题。 将代码转换为模板后,我将无法再访问类的私有成员。 我收到“当前”是“迭代器”的私有成员的错误。 所以首先我有每节课:

template <class T>
struct nodeType {
    T info;
    nodeType<T> *link;
};

template <class T>
class Iterator {
public:
    Iterator();
    Iterator(nodeType<T> *);
    T operator*();
    bool IsNull();
    Iterator<T> operator++();
    Iterator<T> operator++(int);
    bool operator==(const Iterator<T> &) const;
    bool operator!=(const Iterator<T> &) const;
    Iterator<T> &operator=(T);
private:
    nodeType<T> *current;
};

template <class T>
class LinkedList {
public:
    LinkedList();
    LinkedList(const LinkedList<T> &);
    ~LinkedList();
    void InsertHead(T);
    Iterator<T> InsertAfter(T, Iterator<T>);
    Iterator<T> Search(T);
    bool IsEmpty();
    void Print();
    void DestroyList();
    Iterator<T> Start();
    Iterator<T> End();
    const LinkedList<T> &operator=(const LinkedList<T> &);
private:
    nodeType<T> *head;
};

在使用模板之前,我使用了以下代码,但current不是私有的,因此不再有效。

template <class T>
Iterator<T> LinkedList<T>::InsertAfter(T input, Iterator<T> marker) {
    Iterator<T> newNode = new nodeType<T>;
    Iterator<T> findNode = marker;

    newNode = input;
    newNode.current->link = findNode.current->link;
    findNode.current->link = newNode.current;
    return findNode;
}

然后,我尝试执行以下操作,并且没有错误,但是当我调用InsertAfter函数将新项目添加到列表中时,它没有显示。 我做了一个cout newNode = input; 它显示了我要插入的值,但是节点似乎没有连接。 为什么我不能使用之前的代码? newNode.current->link = findNode.current->link;

template <class T>
Iterator<T> Iterator<T>::operator++() {
    current = current->link;
    return *this;
}

template <class T>
Iterator<T> Iterator<T>::operator++(int) {
    Iterator<T> temp;

    temp = *this;
    ++(*this);
    return temp;
}

template <class T>
Iterator<T> LinkedList<T>::InsertAfter(T input, Iterator<T> marker) {
    Iterator<T> newNode = new nodeType<T>;
    Iterator<T> findNode = marker;

    newNode = input;
    newNode++ = findNode++;
    findNode++ = newNode;
    return findNode;
}

===============>>#1 票数:0

您不能在LinkedList的成员函数中执行newNode.current ,因为currentIterator私有的。 那就是private意思-它只能从它所属的类的成员函数中访问。

显然,您的“旧”代码是不同的。 可能您在旧代码中有Iterator friend LinkedList。 如果您发布旧代码,则可能会清除问题。

  ask by MrPilot translate from so

未解决问题?本站智能推荐: