问个map的问题

ahutbxh 2011-10-12 08:13:42
泛型函数中,
template<class T>
typename T::value_type re(T begin,T end)
{
//1:
map<typename T::typename,int> mmp;
//2:
map<typename T::value_type,int>::iterator ix=mmp.begin();
}

在DC下为什么 1编译能通过,但加上语句2就编译他不通过,提示 unexpected ; before ix??
...全文
118 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ahutbxh 2011-10-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 taodm 的回复:]

楼主,你typename T::value_type,int 的typename知道是干嘛的吗?
[/Quote]

如果不用typename不就是默认value_type是T得成员吗,加上typename不是表示它是一种类型吗?
qq120848369 2011-10-12
  • 打赏
  • 举报
回复
模板有那么智慧么,应该没有。。
taodm 2011-10-12
  • 打赏
  • 举报
回复
楼主,你typename T::value_type,int 的typename知道是干嘛的吗?
iamnobody 2011-10-12
  • 打赏
  • 举报
回复
改为6楼那样。
ahutbxh 2011-10-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mingliang1212 的回复:]

你到底想实现什么功能,两不同的map怎么可能iterator 相同。。
[/Quote]
不同的map?
iamnobody 2011-10-12
  • 打赏
  • 举报
回复
你到底想实现什么功能,两不同的map怎么可能iterator 相同。。
iamnobody 2011-10-12
  • 打赏
  • 举报
回复

template<typename T>
void com(typename T::iterator begig,typename T::iterator end)
{
//1
map<typename T::value_type,int > mmp;
//2
map<typename T::value_type,int>::iterator ix=mmp.begin();
}
ahutbxh 2011-10-12
  • 打赏
  • 举报
回复
这个函数本意是传递2个vector<int>的迭代器,但是这样传之后T不就是被实例化vector<int>::iterator类型了吗,那就不应该有value_type这一说了?
下面的是我自己用显示实例化的例子,还是出现上面的问题:



#include <cstdlib>
#include <iostream>
#include <map>
#include <vector>

using namespace std;

template<typename T>
void com(typename T::iterator begig,typename T::iterator end)
{
//1
map<typename T::iterator,int > mmp;
//2
map<typename T::value_type,int>::iterator ix=mmp.begin();
}
int main(int argc, char *argv[])
{
vector<int> mmm;
mmm.push_back(1);
mmm.push_back(2);
mmm.push_back(2);
com< vector<int> >(mmm.begin(),mmm.end());
system("PAUSE");
return EXIT_SUCCESS;
}




同样加上第二句编译错误:
In function `void com(typename T::iterator, typename T::iterator)':
12行---expected `;' before "ix"
In function `void com(typename T::iterator, typename T::iterator) [with T = std::vector<int, std::allocator<int> >]':
20行--- instantiated from here
12行--- dependent-name ` std::map<typename T::value_type,int,std::less<typename T::value_type>,std::allocator<std::pair<const typename T::value_type, int> > >::iterator' is parsed as a non-type, but instantiation yields a type
12行--- say `typename std::map<typename T::value_type,int,std::less<typename T::value_type>,std::allocator<std::pair<const typename T::value_type, int> > >::iterator' if a type is meant
[Build Error] [main.o] Error 1
在网上搜了下,有人说在第二句话之前加typename map<……>::iterator,,编译也出错!

还有,假如说函数是这样的com(T,T)
但我调用的时候传递的却是 com(mmm.begin(),mmm.end() ),那么此时的T到底是vector<int>类型还是vector<int>::iterator类型?我个人认为应该是后一种。
iamnobody 2011-10-12
  • 打赏
  • 举报
回复
不能推导出的是键类型。。。
iamnobody 2011-10-12
  • 打赏
  • 举报
回复
由迭代器是没有办法推导出map的值类型的。应该是。
星羽 2011-10-12
  • 打赏
  • 举报
回复
你传的T是什么类型?
iamnobody 2011-10-12
  • 打赏
  • 举报
回复
请贴完整的代码和错误信息

64,643

社区成员

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

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