在它所属的模板 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>{};
};
我的代码
#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>{};
};