关于linux与windows stl map的问题

devilbelief 2009-09-21 04:56:55
#include <map>
using namespace std;

template<typename K, typename T>
class a
{
public:
map<K,T> _map;
T find(K v)
{
map<K,T>::iterator iter;
iter = _map.find(v);
if(iter != _map.end())
return iter->second;
else
return (T)0;
}
};
int main()
{
a<int, unsigned int> b;
return 0;
}

为什么这段代码在vc2005中可以编译通过,而在linux(red heat)下不能通过?
...全文
169 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
devilbelief 2009-09-21
  • 打赏
  • 举报
回复
受教了,看来得好好学习了!
mstlq 2009-09-21
  • 打赏
  • 举报
回复

#include <map>
using namespace std;

template<typename K, typename T>
class a
{
public:
map<K,T> _map;
T find(K v)
{
typename map<K,T>::iterator iter;//mark
iter = _map.find(v);
if(iter != _map.end())
return iter->second;
else
return (T)0;
}
};
int main()
{
a<int, unsigned int> b;
return 0;
}
yutaooo 2009-09-21
  • 打赏
  • 举报
回复

加上 typename.
如下:

#include <map>
using namespace std;

template<typename K, typename T>
class a
{
public:
map<K,T> _map;
T find(K v)
{
typename map<K,T>::iterator iter;
iter = _map.find(v);
if(iter != _map.end())
return iter->second;
else
return (T)0;
}
};

int main()
{
a<int, unsigned int> b;
return 0;
}
taodm 2009-09-21
  • 打赏
  • 举报
回复
呃,google 模板参数依赖类型。
typename的功能没好好学吧。
devilbelief 2009-09-21
  • 打赏
  • 举报
回复
test.cpp: In member function `T a<K, T>::find(K)':
test.cpp:11: error: expected `;' before "iter"
test.cpp:12: error: `iter' was not declared in this scope

red heat下编译报这个错
devilbelief 2009-09-21
  • 打赏
  • 举报
回复
去掉a<int, unsigned int> b;这行也一样,与模板参数无关
「已注销」 2009-09-21
  • 打赏
  • 举报
回复
那是因为int和unsigned int在linux平台下没有区别。
模板的二义性。与编译器实现有关。

65,186

社区成员

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

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