typedef 在模板中的使用

南friend 2016-03-28 11:14:37
template<class T>
class vector
{


public:
typedef Iterator<T> iterator;

…………..
iterator erase(iterator pos);
}





template<class T> vector<T>::iterator vector<T>::erase(iterator pos)
{
return pos;
}



如上,在实现erase 时, 返回类型为 vector<T>::iterator 编译器报错, 改为Iterator<T> 就可以了

	template<class T> Iterator<T>  vector<T>::erase(iterator   pos)
{
return pos;

Iterator 是在同个文件前面定义的另一个模板类

小弟新手,十分困惑
...全文
273 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
南friend 2016-03-30
  • 打赏
  • 举报
回复
引用 4 楼 paschen 的回复:
不加 typename编译器会当作名称,而不是一种类型

template<class T> typename vector<T>::iterator  vector<T>::erase(iterator   pos)
{
	return pos;
}
感谢! 学习了typename 的用法就更加明白了
paschen 版主 2016-03-29
  • 打赏
  • 举报
回复
不加 typename编译器会当作名称,而不是一种类型

template<class T> typename vector<T>::iterator  vector<T>::erase(iterator   pos)
{
	return pos;
}
ztenv 版主 2016-03-29
  • 打赏
  • 举报
回复
好像是叫类型依赖,看看相关知识就了解了
ri_aje 2016-03-29
  • 打赏
  • 举报
回复
得加 typename 关键字。新版 c++ 的话,用 using 吧,看着比 typedef 舒服一些。
renwotao2009 2016-03-28
  • 打赏
  • 举报
回复
typename vector<T>::iterator 呢

64,684

社区成员

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

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