我有一个带有私有地图成员的模板类
template <typename T>
class MyClass
{
public:
MyClass(){}
private:
std::map<T,T> myMap;
}
我想创建一个接受地图迭代器的私有方法
void MyFunction(std::map<T,T>::iterator &myIter){....}
但是,这会出现编译错误:标识符'iterator'。我不需要传递一个抽象迭代器,因为MyFunction知道它是一个map迭代器(并且只会用作myMap的一个迭代器)并且会将其视为这样(访问和修改myIter-&gt; second)。将myIter-&gt;秒传递给MyFunction是不够的,因为MyFunction也需要能够使用++ myIter;。
答案 0 :(得分:7)
编译器不知道std::map<T,T>::iterator
是一种类型 - 它可以是任何东西,具体取决于std::map<T,T>
。您必须使用typename std::map<T,T>::iterator
明确指定此内容。
答案 1 :(得分:2)
您必须使用typename
:
template <typename T>
class MyClass
{
public:
MyClass(){}
private:
void MyFunction(typename std::map<T,T>::iterator &myIter){....}
std::map<T,T> myMap;
}
答案 2 :(得分:1)
您应该在参数列表中的std :: map&lt; T,T&gt; :: iterator之前添加“typename”关键字。