【问题标题】:Iterator on vector error for operands "=" and "!="操作数“=”和“!=”的向量错误迭代器
【发布时间】:2015-05-11 17:02:35
【问题描述】:
using namespace std;
    vector<IDrawable*>::const_iterator itDrawable;
    for(itDrawable= scene.getDrawables().begin(); itDrawable!=scene.getDrawables().end();itDrawable++){
        IDrawable *drawable =(*itDrawable);
        drawable->draw();
    }

此代码将错误传递给我:

描述资源路径位置类型与“操作员!=”不匹配 (操作数类型是 'std::vector&lt;IDrawable*&gt;::const_iterator {aka __gnu_cxx::__normal_iterator&lt;IDrawable* const*, std::vector&lt;IDrawable*&gt; &gt;}' 和 'std::vector<const IDrawable*>::const_iterator {aka __gnu_cxx::__normal_iterator<const IDrawable* const*, std::vector<const IDrawable*> >}')

描述资源路径位置类型不匹配'operator=' (操作数类型是 'std::vector&lt;IDrawable*&gt;::const_iterator {aka __gnu_cxx::__normal_iterator&lt;IDrawable* const*, std::vector&lt;IDrawable*&gt; &gt;}' 和 'std::vector<const IDrawable*>::const_iterator {aka __gnu_cxx::__normal_iterator<const IDrawable* const*, std::vector<const IDrawable*> >}')

我已经查看了这些内容,我应该与 const_iterator 有什么关系吗? 然而我的scene.getDrawables() 看起来像:

const std::vector<const IDrawable*>& getDrawables() const {
        return drawables;
    }

所以迭代器应该是一个 const_iterator 对吧? 我不知道要改变什么......

【问题讨论】:

  • 你看不出getDrawables()返回的类型和你声明迭代器的类型有什么区别?
  • 大声笑,不,我没有哈哈:p
  • 不,这是唯一的吸气剂...

标签: c++ pointers vector iterator


【解决方案1】:

你的

const std::vector<const IDrawable*>& getDrawables() const

返回对const IDrawable* 指针向量的常量引用。然而你的

vector<IDrawable*>::const_iterator itDrawable; 

const_iterator 声明为不同类型的向量(IDrawable*,而不是const IDrawable*)。将定义更改为vector&lt;const IDrawable*&gt;::const_iterator itDrawable; 或简单地使用autofor 循环中声明迭代器,

for(auto itDrawable= scene.getDrawables().cbegin(); ...)

【讨论】:

    【解决方案2】:

    您问题的格式隐藏了真正的问题,但您使用了:

    vector<IDrawable*>::const_iterator itDrawable;
    

    你应该使用的地方

    vector<const IDrawable*>::const_iterator iDrawable;
    

    同样,你需要

    const IDrawable *drawable =...
    

    而不是

    IDrawable *drawable =...
    

    这一切都是因为你有一个std::vector&lt;const IDrawable*&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多