我正在尝试使用迭代器来实现一个简单的列表以进行实践,但是我遇到了一个编译错误,我不完全理解自己无法修复它。当我尝试在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
对于在哪里寻找任何线索的任何帮助或指示,我将不胜感激。
您的课程MyListItr
必须是
template<typename T>
class MyListItr {
typename MyList<T>::Node* data;
public:
MyListItr(typename MyList<T>::Node*data):data(data) {}
// ...
};