LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1897|回复: 4

使用typename std::list<T*>::iterator IT;时出错,帮忙看看,谢谢

[复制链接]
发表于 2006-9-14 09:45:16 | 显示全部楼层 |阅读模式

  1. #include <iostream>
  2. #include <list>
  3. #include <iterator>

  4. template <class T>
  5. class test
  6. {
  7.     public:
  8.         typedef std::list<T*> LIST;
  9.         typename std::list<T*>::iterator IT;
  10.         test(){};
  11.         ~test(){};
  12.         void aaa(LIST a)
  13.         {
  14.             IT b;//这行gcc编译出错
  15.         };
  16.         T* bbb(IT pos)//这行gcc和cl编译都出错
  17.         {
  18.             T* c;
  19.             //.....
  20.             return c;
  21.         };
  22. };

  23. int main()
  24. {
  25.     return 0;
  26. }
复制代码


请指教,thanks!
发表于 2006-9-14 11:15:22 | 显示全部楼层
  1.         ...
  2.         typedef std::list<T*> LIST;    // 你这行知道用typedef。
  3.         [color=red]typename std::list<T*>::iterator IT;  // 这行为什么又不用? 你这样是定义了一个IT变量,而且不是类型。[/color]
  4.         ...
复制代码
把第二行改为:
  1.         typedef typename std::list<T*>::iterator IT;
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-15 20:23:56 | 显示全部楼层
呵呵,谢谢,C++很菜
另外,为什么typedef std::list<T*>::iterator IT;不行?
回复 支持 反对

使用道具 举报

发表于 2006-9-15 23:16:15 | 显示全部楼层
Post by guoys
另外,为什么typedef std::list<T*>::iterator IT;不行?

这是C++标准的规定。对于模板类,编译期无法判断std::list<T*>::iterator是类型还是变量(常量),因此需要typename关键字来标识类型。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-17 10:52:02 | 显示全部楼层
谢谢解答!:thank
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表