我的代码
#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)
我真的很感激任何帮助。
答案 0 :(得分:1)
答案 1 :(得分:0)
第一次使用时必须知道类型。 您必须更改声明的顺序。
注意,声明类ListNodePtr
时必须知道类型List::Iterator
,因为类在类中使用。
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>{};
};