类模板嵌套类的问题——在线等

flyoxs 2005-05-08 11:38:44
想模仿STL定义一个List类模板,并在里面定义了迭代器类Iterator,请问类Iterator的成员函数定义要怎样的形式?

template<class T>
class List
{
struct Node
{
T data;
Node * prior;
Node * next;
};
public:
class Iterator
{
Node * pNode;
public:
Iterator(){}
Iterator(Node* p):pNode(p){}
operator Node * (){return pNode;}
T & operator*(){return pNode->data;}
Iterator & operator++();
........
};
.......
};

比如这个函数:Iterator & operator++();
在类外要怎样定义?如下可以吗:

template<class T>
inline Iterator& List<T>::Iterator::operator ++()
{
.........
}

但在VC下编译通不过,提示:

List.cpp(13) : error C2143: 语法错误 : 缺少“;”(在“&”的前面)
List.cpp(13) : error C2433: “Iterator” : 不允许在数据声明中使用“inline”
List.cpp(13) : error C2501: “Iterator” : 缺少存储类或类型说明符
List.cpp(13) : error C2065: “T” : 未声明的标识符
List.cpp(13) : error C2955: “List” : 使用类模板需要模板参数列表

请大侠帮帮我,万分感谢!
...全文
242 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qhfu 2005-05-09
  • 打赏
  • 举报
回复
呵呵,记得揭帖,回答会更热心的 ^_^
flyoxs 2005-05-09
  • 打赏
  • 举报
回复
第一次上CSDN,果然高手云集!
几分钟就解决了问题,真爽!
好在有你们这些前辈指点,让我们菜鸟少走弯路!
向你们学习!
qhfu 2005-05-09
  • 打赏
  • 举报
回复
c++primer上好像有的,我也忘了在哪看到了,我以前也是碰到过这个问题,搞了很久, 后来才知道, 不过为什么要加也不是很清楚, 好像是后来c++标准里面要求的吧。
定义模板的时候以前都是用 template<class T>
其实也可以用
template<typename T>
flyoxs 2005-05-09
  • 打赏
  • 举报
回复
谢了。终于通过了编译!!!
不过为什么要用typename这个关键字,还很模糊。。。。
qhfu 2005-05-08
  • 打赏
  • 举报
回复
在声明的地方加个inline就行了,外面定义的时候可以不用,
typename好像是一个新的关键字, 在vs2003下,如果前面不加这个关键字没法通过编译 :)
flyoxs 2005-05-08
  • 打赏
  • 举报
回复
请恕我愚昧,typename 是用来什么的?它有什么作用?
若要声明为内联函数,是否在前面加上 inline 就行了?
多谢赐教!
qhfu 2005-05-08
  • 打赏
  • 举报
回复
template<class T>
typename List<T>::Iterator& List<T>::Iterator::operator++()
{
.........
}

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧