关于模板的一个问题

mrenmren3000 2012-04-23 04:32:27
写了段小程序老是报错,大家帮忙看下
#include <map>
#include <string>

using namespace std;

template <class T>
class test
{
public:
void add(const char* index, T* data);
void remove(const char* index);
int getSize();
private:
map<string, T*> m_map;
};

template <class T>
int test<T>::getSize()
{
return m_map.size();
}

template <class T>
void test<T>::add(const char* index, T* data)
{
m_map[index] = data;
}

template <class T>
void test<T>::remove(const char* index)
{
map<string, T*>::iterator it = m_map.find(index);

if ( it != m_map.end() )
{
delete (T*)(it->second);
m_map.erase(it);
}
}

int main()
{
test<int> a;
return 0;
}

编译错误:
g++ -o a template.cpp
template.cpp: In member function ‘void test<T>::remove(const char*)’:
template.cpp:33: error: expected `;' before ‘it’
template.cpp:35: error: ‘it’ was not declared in this scop
...全文
56 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mrenmren3000 2012-04-23
  • 打赏
  • 举报
回复
非常感谢各位
evencoming 2012-04-23
  • 打赏
  • 举报
回复
如ls那样改.
因为在模板函数里面或者类里面, 编译器无法知道::之后的是一个类型还是一个变量.
如你上面错误的iterator,你得在前面加typename 告诉编译器,这是个变量,编译器才会知道.
pengzhixi 2012-04-23
  • 打赏
  • 举报
回复
可以结贴了,google"模板参数依赖类型"
ri_aje 2012-04-23
  • 打赏
  • 举报
回复
把这句

map<string, T*>::iterator it = m_map.find(index);

改成这样

typename map<string, T*>::iterator it = m_map.find(index);

64,682

社区成员

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

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