这就是我的目标。
template<class T>
class List{
Node<T> head;
int size;
public:
class Iterator;
template <class T>
class List<T>::Iterator{
public:
Iterator& operator++();
我正试图这样实施:
template<class T>
typename List<T>::Iterator& List<T>::Iterator::operator++()
但它一直告诉我“未找到会员声明”
修改 这就是整个相关代码:
template <class T>
class Node {
T data;
Node<T>* next;
public:
Node () : next(0){};
Node (const T& info, Node<T>* next = 0) : data(info), next(next){};
friend class List<T>;
friend class Iterator;
friend class ConstIterator;
};
template<class T>
class List{
Node<T> head;
int size;
void listSwap(Node<T>* node1, Node<T>* node2);
public:
class Iterator;
class ConstIterator;
List ();
List(const List<T>& list);
List& operator=(const List<T>& list);
ConstIterator begin() const;
Iterator begin();
ConstIterator end() const;
Iterator end();
void insert(const T& t);
void insert(const T& t,const Iterator& it);
void remove(const Iterator& it);
// template<class Function>
// ConstIterator find(Function f);
template<class Function>
Iterator find(Function f);
template<class Function>
void sort(Function f);
int getSize();
bool operator==(const List<T>& list2) const;
bool operator!=(const List<T>& list2) const;
~List();
};
template <class T>
class List<T>::Iterator{
List<T>* list;
Node<T>* index;
public:
Iterator(List<T> list);
Iterator(List<T> list, Iterator& it);
Iterator& operator++();
Iterator operator++(int);
T operator*();
bool operator==(const Iterator& iterator2);
bool operator!=(const Iterator& iterator2);
~Iterator();
friend class List<T>;
};
以为我认为没关系:/ 有时令人沮丧.... 谢谢你们的帮助!
答案 0 :(得分:1)
如果迭代器是嵌套类,则template<class T> class List<T>::Iterator
类定义中不需要Iterator
。只需class Iterator
。
template<class T>
class List{
Node<T> head;
int size;
public:
class Iterator
{
public:
Iterator& operator++();
....
};
....
};
或者你错过了};
课程的结束List
:
template<class T>
class List{
Node<T> head;
int size;
public:
class Iterator;
};
^^ HERE!
答案 1 :(得分:0)
我看到一些明显的错误,因为在定义List
之前类List<T>::Iterator
没有关闭,但我认为它是因为你切断了部分代码。
不幸的是,我无法重现你的情况。以下代码:
class List {
int size;
public:
class Iterator;
};
template <class T>
class List<T>::Iterator {
public:
Iterator& operator++();
};
template <class T>
typename List<T>::Iterator& List<T>::Iterator::operator++() {
return *this;
}
int main() {
}
它在g ++(4.6.3)和clang ++(3.1)下编译得很好,所以问题就在于你没有向我们展示的其他地方。
答案 2 :(得分:0)
你的第一个代码示例似乎被忽视了。
至于你的第二个(更长的)代码部分,除了一个可疑区域外,我没有看到它的错误。 friend
中的Node
声明将引用全局命名空间中的一些非模板Iterator
和ConstIterator
类。同时,Iterator
中的ConstIterator
和List
是不属于全局命名空间的模板。 friend
中的Node
声明是否应该引用Iterator
中的ConstIterator
和List
?