-1

所以这就是我要去的地方。

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>;
};

以为我觉得没关系:/有时真令人沮丧....谢谢你们的帮助!

4

3 回答 3

1

如果迭代器是嵌套类,则不需要template<class T> class List<T>::IteratorIterator类定义中。只是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!
于 2013-06-08T16:45:20.643 回答
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) 下编译得很好,所以问题出在你没有向我们展示的其他地方。

于 2013-06-08T16:42:34.770 回答
0

您的第一个代码示例似乎被撕得面目全非。

至于您的第二段(更长的)代码,除了一个可疑区域之外,我认为它没有任何问题。您的friend声明Node将引用全局命名空间中的一些非模板IteratorConstIterator类。同时,IteratorConstIteratorfromList是不属于全局命名空间的模板。这些friend声明是否Node应该引用IteratorConstIterator来自List或不?

于 2013-06-08T18:32:15.843 回答