Chinaunix首页 | 论坛 | 博客
  • 博客访问: 130139
  • 博文数量: 25
  • 博客积分: 290
  • 博客等级: 二等列兵
  • 技术积分: 210
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-30 23:13
文章分类

全部博文(25)

文章存档

2015年(10)

2014年(7)

2011年(3)

2010年(1)

2008年(4)

我的朋友

分类: C/C++

2015-04-24 15:30:00

  1. template<typename T1>  
  2. void printList(const T1 & t1)  
  3. {  
  4.     for(typename T1::const_iterator it =t1.begin(); it!=t1.end(); ++it)  
  5.     {  
  6.       cout<<(*it) << endl;  
  7.     }  
  8. };  

如果写得更好,就得重载 operation << 了。

请注意 typename T1::const_iterator it ;一定要加上typename。即使有些编译器让你通过。

不写的话可能有以下错误:


  • main.cpp:103: error: expected `;' before ‘int’
  • main.cpp:103: error: ‘it’ was not declared in this scope
  • main.cpp:91: instantiated from here
  • main.cpp:103: error: dependent-name ‘std::map,std::allocator > >::const_iterator’ is parsed as a non-type, but instantiation yields a type
  • main.cpp:103: note: say ‘typename std::map,std::allocator > >::const_iterator’ if a type is mean 

    如下有问题:

    1. template<class T, class A>  
    2. void ShowMap(const map& v)  
    3. {  
    4.   for (map ::const_iterator ci = v.begin();ci != v.end(); ++ci)  
    5.     cout << ci ->first <<": " << ci ->second <
    6.     cout << endl;  
    7. }  

    解释:It accurately doesn't treat map::const_iterator as a type because it relies on template parameters, T and A. To make the compiler believe you, you need to use the typename keyword.


  • 阅读(529) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~