操作数“=”和“!=”的向量错误迭代器

Posted

技术标签:

【中文标题】操作数“=”和“!=”的向量错误迭代器【英文标题】: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 不,这是唯一的吸气剂... 【参考方案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;

【讨论】:

以上是关于操作数“=”和“!=”的向量错误迭代器的主要内容,如果未能解决你的问题,请参考以下文章

向量迭代器不是增量的

向量和迭代器的分段错误? [关闭]

带有向量迭代器的程序中的分段错误

“向量擦除迭代器超出范围”错误

提供错误值的向量迭代器

向量迭代器不可取消引用 C++