map <t,t> :: iterator作为参数类型</t,t>

时间:2010-08-05 15:22:01

标签: c++ stl parameters iterator

我有一个带有私有地图成员的模板类

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;。

3 个答案:

答案 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”关键字。