将map<>::iterator作为map<>::const_iterator传递
Passing map<>::iterator as map<>::const_iterator &
我在将map<...>::iterator对象传递给函数时遇到问题,作为const_iterator和GCC上的函数:
class MyClass {
};
bool MyClass::_GetInstList(map<string,InstList>::const_iterator & it, const string & sMod)
{
cout<<"Matchedn";
it = tInstancesData.find(sMod);
if( it == tInstancesData.end() ) {
cout<<"""<<sMod<<"" is NOT a modulen";
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(它,SomeString)。问题似乎是将迭代器转换为const_iterator&。
我必须通过引用来获取它,因为"it"在 _GetInstList() 中被更改并且调用者函数会检查它。(更改了"it"指针而不是指向元素)。
此外,SomeFunction() 中的"it"不能是常量,因为它会更改一个元素。
我该如何解决这个问题?
编辑:对于那些认为问题在于从迭代器到const_iterator的转换的人:如果将函数原型更改为以 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
}
我认为
也许无论如何都应该重新设计这种方法。传递迭代器对于其他人来说既混乱又令人困惑。这样做有多难?
相关文章:
- EASTL矢量<向量<int>>连续的
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- std::iterator::reference 必须是引用吗?
- 为什么unordered_set<string::iterator>不起作用?
- 造成致命错误:boost/fusion/iterator/equal_to.hpp 没有这样的文件或目录
- Visual accept std::string from std::byte iterator
- 什么是"std::set<int,int>::iterator"?
- 从 std::vector 中删除项目时"Iterator not incrementable"
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 空集"Out of bound iterator"
- 如何使用set<pair<int,int> >::iterator itrator it迭代set<pair<int,int> >st中的值?
- 给定一个类型为 Container:<T>:Iterator 的函数参数,如何为某些类型的 T 实现特定的重载?
- 带升压async_read_some "String iterator not dereferncable"
- C++为什么"deque iterator not dereferencable "
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:与'operator='不匹配(操作数类型为"std::map<int、double>::iterator
- 自动,错误:MAP ITERATOR没有名为“ First”的成员
- C 字符串比较“祝您好运”&gt;“再见”
- set<shared_ptr<T>>::iterator to set<shared_ptr<t const>>::const_iterator
- 标准::复制失败,"cannot seek vector iterator after end"