今天在练习hash table时候,准备采用vetor和list进行实现,当我定义一个模板类的迭代器时候,出现错误。于是我在网上找找如何处理这个问题,最终解决了问题,记录在此以后,便于以后查看。我写的测试程序如下:
#include <iostream>
#include <vector>
#include <list>
using namespace std;
template <class T>
class Test
{
public:
void insert(const T& x)
{
lists.push_back(x);
}
void display()
{
list<T>::iterator iter; //模板类型的迭代器
for(iter = lists.begin();iter != lists.end);iter++)
cout<<*iter<<" ";
cout<<endl;
}
private:
list<T> lists;
};
int main()
{
Test<int> t;
t.insert(10);
t.insert(20);
t.insert(30);
t.insert(40);
t.display();
return 0;
}
编译程序时候提示如下错误:在第16行
error: need ‘typename’ before ‘std::list::iterator’ because ‘std::list’ is a dependent scope|
提示的意思是说在list前面需要用typename限定一下,因为编译器不知道list::iterator是代表一个类型。于是下将16行代码:
list<T>::iterator iter;
改为
typename std::list<T>::iterator iter;
程序顺利通过编译。参考:http://blog.csdn.net/markman101/article/details/7172918