在它所属的模板 class 中使用内部 class

use inner class in a template class where it belong to

我的代码

#include <iostream>
using namespace std;

template<typename E>
struct Node{};

template<typename E,typename I>
class List{
public:
  class Iterator{
  public:
  private:
    ListNodePtr ptr; //‘ListNodePtr’ does not name a type
  };
private:
  ListNodePtr foo(ListNodePtr); // ‘ListNodePtr’ does not name a type
  struct ListNode:public Node<E>{};
  typedef ListNode* ListNodePtr;
};

我收到错误消息(上面的评论)

我怎样才能让它发挥作用?

此外,我不确定如何在 .cpp

中定义 ListNodePtr foo (ListNodePtr)

非常感谢任何帮助。

类型声明应优先于其用法。

在使用前移动您的 typedef

Here一个编译的demo。

第一次使用必须知道类型。 您必须更改声明的顺序。

请注意,在声明 class List::Iterator 时必须知道类型 ListNodePtr,因为该类型在 class.[=15= 内部使用]

template<typename E,typename I>
struct List{
private:
    struct ListNode:public Node<E>{};
    typedef ListNode* ListNodePtr;
public:
    class Iterator{
        ListNodePtr ptr;
    };
private:
    ListNodePtr foo(ListNodePtr);
};

对于结构 ListNode 你也可以使用前向声明。

template<typename E,typename I>
struct List{
private:
    struct ListNode; // forward declartion of the structure `ListNode`
    typedef ListNode* ListNodePtr;
public:
    class Iterator{
        ListNodePtr ptr;
    };
private:
    ListNodePtr foo(ListNodePtr);
    struct ListNode:public Node<E>{};
};