繁体   English   中英

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

[英]Iterator on vector error for operands “=” and “!=”

using namespace std;
    vector<IDrawable*>::const_iterator itDrawable;
    for(itDrawable= scene.getDrawables().begin(); itDrawable!=scene.getDrawables().end();itDrawable++){
        IDrawable *drawable =(*itDrawable);
        drawable->draw();
    }

这段代码向我传递了错误:

说明资源路径位置类型与'operator!='不匹配(操作数类型为' std::vector<IDrawable*>::const_iterator {aka __gnu_cxx::__normal_iterator<IDrawable* const*, std::vector<IDrawable*> > }'和' std::vector<const IDrawable*>::const_iterator {aka __gnu_cxx::__normal_iterator<const IDrawable* const*, std::vector<const IDrawable*> > }')

说明资源路径位置类型'operator ='不匹配(操作数类型为' std::vector<IDrawable*>::const_iterator {aka __gnu_cxx::__normal_iterator<IDrawable* const*, std::vector<IDrawable*> > } '和' 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对吗? 我不知道必须改变什么...

你的

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

返回对const IDrawable*指针向量的const IDrawable* 但是你的

vector<IDrawable*>::const_iterator itDrawable; 

const_iterator声明为不同类型的向量( IDrawable* ,而不是const IDrawable* )。 将定义更改为vector<const IDrawable*>::const_iterator itDrawable; 或者只是使用autofor循环中声明迭代器,

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

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

vector<IDrawable*>::const_iterator itDrawable;

你应该在哪里使用

vector<const IDrawable*>::const_iterator iDrawable;

同样,您然后需要

const IDrawable *drawable =...

代替

IDrawable *drawable =...

所有这些都是由于您具有std::vector<const IDrawable*>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM