Mar*_*B42 4 c++ parameters iterator stl
我有一个带有私有地图成员的模板类
template <typename T>
class MyClass
{
public:
MyClass(){}
private:
std::map<T,T> myMap;
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个接受地图迭代器的私有方法
void MyFunction(std::map<T,T>::iterator &myIter){....}
Run Code Online (Sandbox Code Playgroud)
但是,这会产生编译错误:标识符'iterator'.我不需要传递一个抽象迭代器,因为MyFunction知道它是一个map迭代器(并且只会用作myMap的一个迭代器)并且会将其视为这样(访问和修改myIter-> second).将myIter-> second传递给MyFunction是不够的,因为MyFunction也需要能够使用++ myIter ;.
编译器不知道这std::map<T,T>::iterator是一个类型 - 它可以是任何东西,取决于什么std::map<T,T>.您必须明确指定typename std::map<T,T>::iterator.