【问题标题】:Returning an Iterator返回一个迭代器
【发布时间】:2010-09-23 18:17:49
【问题描述】:

我有一个搜索 STL 容器然后在找到位置时返回迭代器的函数,但是我收到一些有趣的错误消息,能告诉我我做错了什么吗?

功能:

std::vector< CClass >::iterator CClass::SearchFunction( const std::string& strField )
{
...

   return it;

...
}

错误:

error C2664: 'std::_Vector_iterator<_Ty,_Alloc>::_Vector_iterator(const std::_Vector_iterator<_Ty,_Alloc> &)' : cannot convert parameter 1 from 'std::_Vector_const_iterator<_Ty,_Alloc> *__w64 ' to 'const std::_Vector_iterator<_Ty,_Alloc> &'

【问题讨论】:

    标签: c++ stl iterator


    【解决方案1】:

    您还应该查看 std::find_if() 函数。这可能是一种更清洁的方法。

    【讨论】:

      【解决方案2】:

      您的搜索函数正在返回一个 const_iterator。如果您希望调用者能够通过迭代器修改找到的项目,您应该返回相同的类型,即std::vector&lt; CClass &gt;::const_iterator,或者将其转换为std::vector&lt; CClass &gt;::iterator。

      编辑:看到您的更新后,问题似乎是您的迭代器(它)与您的函数返回的类型不同。它们应该是相同的。

      std::vector< CClass >::iterator it;
      

      【讨论】:

        【解决方案3】:

        听起来你把你的 const_iterators 搞混了。请发布更多代码,特别是您如何声明迭代器。

        【讨论】:

          猜你喜欢
          • 2018-06-15
          • 2020-07-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-09
          • 2021-07-11
          相关资源
          最近更新 更多