gpt4 book ai didi

c++ - 将 map<>::iterator 作为 map<>::const_iterator &

转载 作者:太空宇宙 更新时间:2023-11-04 14:10:51 24 4
gpt4 key购买 nike

我在将 map<...>::iterator 对象作为 const_iterator & 在 GCC 上传递给函数时遇到问题:

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() 中的“it”不能是 const,因为它改变了一个元素。

我该如何解决?

编辑:对于那些认为问题是从迭代器到 const_iterator 的转换的人:如果将函数原型(prototype)更改为以 const_iterator NOT 作为引用,代码编译正常,问题是 const &。

最佳答案

将参数类型更改为 const map<string,InstList>::const_iterator&或者只是一个 map<string,InstList>::const_iterator .

这是一个使用简单类型演示您的问题(和解决方案)的示例:

void func1(double& x){}
void func2(const double& x){}

int main()
{
int x;
func1(x); // error: 'func1' : cannot convert parameter 1 from 'int' to 'double &'
func2(x); // succeeds
}

关于c++ - 将 map<>::iterator 作为 map<>::const_iterator &,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14441238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com