[求助]关于返回是模板类型的问题

紫色动力 2010-06-20 10:03:57
函数原型如下:

template <typename T>
list<T>::iterator seqSearch(typename list<T>::iterator first,
typename list<T>::iterator last, const T& target);

如果这样写会出现一个警告:warning C4346: 'std::list<T>::iterator' : dependent name is not a type prefix with 'typename' to indicate a type。
然后程序就会出错,如果在声明前加一个“typename”写成下面这样:

template <typename T>
typename list<T>::iterator seqSearch(typename list<T>::iterator first,typename list<T>::iterator last, const T& target)

就没有问题,这是为何?谢谢!!
...全文
103 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2010-07-07
  • 打赏
  • 举报
回复
就是2个字:“规定”
紫色动力 2010-07-07
  • 打赏
  • 举报
回复
原来是这样,呵呵!

[Quote=引用 3 楼 cattycat 的回复:]
返回值list<T>::iterator也得加typename,编译器默认是把域运算符后面的当作成员变量的。可以参见C++必知必会typename用法。
[/Quote]
cattycat 2010-07-06
  • 打赏
  • 举报
回复
返回值list<T>::iterator也得加typename,编译器默认是把域运算符后面的当作成员变量的。可以参见C++必知必会typename用法。
airtrack 2010-07-06
  • 打赏
  • 举报
回复
这个可以看看《C++ templates》
失落的凡凡 2010-07-06
  • 打赏
  • 举报
回复
因为从编译器的角度, 它无法得知list<T>::iterator是否是一个类型,所以编译器需要你给出一个保证, 保证list<T>::iterator是一个类型。

64,683

社区成员

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

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