具有迭代器的自定义列表,尝试使指向嵌套节点类的指针时出错

问题描述 投票:0回答:1

我正在尝试使用迭代器来实现一个简单的列表以进行实践,但是我遇到了一个编译错误,我不完全理解自己无法修复它。当我尝试在Iterator类中使指针指向Node时,出现如下编译错误:

使用类模板需要模板参数列表

这里是产生编译错误的我的headre文件:

#ifndef _MY_LIST_H
#define _MY_LIST_H
#include <memory>



template<class T> 
class MyListItr;

template<typename T>
class MyList {
private:
    int _size;
    friend class MyListItr<T>;
public:
    class Node {
    private:
        T value;
    public:
        std::unique_ptr<MyList::Node> next{ nullptr };

        Node() = delete;
        Node(T& value, MyList::Node* next) :value(value), next(next) {};
        T getVal()const { return value; };
        void setVal(T value) { this->value = value; };
        ~Node() {};
    };

    std::unique_ptr<MyList::Node> head;
    MyList(const MyList<T>&) = delete;
    MyList& operator=(const MyList<T>) = delete;
    MyList() :_size(0), head(nullptr) {};
    int size()const { return _size; };
    void push_front(T);
    T pop_front();
    T front()const;
    void remove(T);
    MyListItr<T> begin() {return MyListItr(this->head)};
    MyListItr<T> end();
    typedef MyListItr<T> iterator;
    typedef MyList<T>::Node value_type;
    typedef MyList<T>::Node* pointer;
    typedef MyList<T>::Node difference_type;
    typedef MyList<T>::Node& reference;

};

template<typename T>
class MyListItr {
    MyList::Node* data;

public:
    MyListItr(MyList::Node*data):data(data) {}

    bool operator!=(MyListItr<T>const& T)const;
    MyListItr<T> operator++();
    T operator*();
};


#endif 

对于在哪里寻找任何线索的任何帮助或指示,我将不胜感激。

c++ oop stl
1个回答
0
投票

您的课程MyListItr必须是

template<typename T>
class MyListItr {
    typename MyList<T>::Node* data;

public:
    MyListItr(typename MyList<T>::Node*data):data(data) {}
    // ...
};
© www.soinside.com 2019 - 2024. All rights reserved.