C++ 在所属的模板类中使用内部类
我的代码C++ 在所属的模板类中使用内部类,c++,templates,inner-classes,C++,Templates,Inner Classes,我的代码 #包括 使用名称空间std; 模板 结构节点{}; 模板 班级名单{ 公众: 类迭代器{ 公众: 私人: ListNodePtr ptr;//“ListNodePtr”未命名类型 }; 私人: ListNodePtr foo(ListNodePtr);//“ListNodePtr”未命名类型 结构ListNode:公共节点{}; typedef ListNode*ListNodePtr; }; 我收到错误消息(上面的评论) 我怎样才能让它工作 此外,我不知道如何在.cpp中定义lis
#包括
使用名称空间std;
模板
结构节点{};
模板
班级名单{
公众:
类迭代器{
公众:
私人:
ListNodePtr ptr;//“ListNodePtr”未命名类型
};
私人:
ListNodePtr foo(ListNodePtr);//“ListNodePtr”未命名类型
结构ListNode:公共节点{};
typedef ListNode*ListNodePtr;
};
我收到错误消息(上面的评论)
我怎样才能让它工作
此外,我不知道如何在.cpp中定义listnodeptrfoo(ListNodePtr)
我非常感谢您的帮助。类型声明的用法应该更高 在使用前移动
typedef
编译的演示。第一次使用类型时必须知道该类型。 您必须更改声明的顺序 注意,声明类
List::Iterator
时必须知道类型ListNodePtr
,因为该类型在类内部使用
#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;
};
可能正在移动
typedef ListNode*ListNodePtr代码>以上类迭代器{
会有帮助吗?您正在使用结构列表,我认为它应该是类List@user1000class
和struct
之间只有3个区别。成员的默认访问说明符。从类型继承时的默认访问说明符。并且可以使用class
而不是typename
用于模板参数,但不能使用struct
。因此,使用struct
非常好。@FrankWang您可以将其标记为私有。实际上,使用access说明符作为前缀而不是按其分组是一种很好的做法。哦,这样做了,谢谢!
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);
};
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>{};
};