12
4

2 回答 2

14

尝试添加前向声明

template <class T> class List;

在开始Iterator.h- 这可能是您需要允许类friend内的声明Iterator工作。

于 2010-01-03T00:49:52.930 回答
5

问题是 List 没有在 Iterator.h 中正确声明。相反,将 Iterator 类嵌套在 List 中(自动使其成为模板),无论如何您都可能想要这样做(使用 List::Iterator 而不是将其重命名为 ListIterator 或 IteratorForList,因为您将拥有多个 Iterator在命名空间中)。

template<class T>
struct List {
  //...
  struct Node {/*...*/};
  struct Iterator {
    // ...
  private:
    Iterator(Node*);
    friend class List; // still required
  };
  //...
};
于 2010-01-03T00:49:09.377 回答