我在 GCC 上将 map<...>::iterator 对象作为 const_iterator & 传递给函数时遇到问题:
class MyClass {
};
bool MyClass::_GetInstList(map<string,InstList>::const_iterator & it, const string & sMod)
{
cout<<"Matched\n";
it = tInstancesData.find(sMod);
if( it == tInstancesData.end() ) {
cout<<"\""<<sMod<<"\" is NOT a module\n";
return false;
}
return true;
}
bool SomeFunction()
{
map<string,InstList>::iterator it;
if( ! _GetInstList(it, SomeString) ) return false;
it->second.Add(...); // Modifying element pointed by "it"
}
我的问题是,在 Visual Studio 2010 上,上面的代码工作得非常好,但在 GCC 4.1.2 上,我收到一个错误,指出函数调用没有匹配函数,对于 _GetInstList(it, SomeString)。问题似乎是将迭代器转换为 const_iterator &。
我必须通过引用来获取它,因为“它”在 _GetInstList() 内部发生了变化,并且调用者函数会检查它。(“it”指针被改变而不是指向元素)。
此外, SomeFunction() 中的“它”不能是 const,因为它改变了一个元素。
我该如何解决这个问题?
编辑:对于那些认为问题是从迭代器到 const_iterator 的转换的人:如果将函数原型更改为以 const_iterator NOT 作为参考,则代码编译得很好,问题是 const &。