2010-08-05 59 views
4

我有一个私人地图成员模板类地图<T,T>:迭代器作为参数类型

template <typename T> 
class MyClass 
{ 
public: 
    MyClass(){} 
private: 
    std::map<T,T> myMap; 
} 

我想创建一个接受一个迭代地图

void MyFunction(std::map<T,T>::iterator &myIter){....} 

的私有方法但是,这会产生一个编译错误:标识符'迭代器'。我不需要传递一个抽象迭代器,因为MyFunction知道它是一个映射迭代器(并且将仅用作myMap的一个interator),并将其视为(访问和修改myIter-> second)。将myIter-> second传递给MyFunction是不够的,因为MyFunction也需要能够++ myIter ;.

回答

7

编译器不知道std::map<T,T>::iterator是一种类型 - 它可能是任何东西,具体取决于std::map<T,T>是什么。您必须用typename std::map<T,T>::iterator明确指定。

1

您应该在参数列表中的std :: map < T,T > :: iterator之前添加“typename”关键字。

2

您必须使用typename

template <typename T> 
class MyClass 
{ 
public: 
    MyClass(){} 
private: 
    void MyFunction(typename std::map<T,T>::iterator &myIter){....} 

    std::map<T,T> myMap; 
} 
相关问题