关于操作数“=”和“!=”

时间:2015-05-11 17:02:35

标签: c++ pointers vector iterator

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吗? 我不知道有什么需要改变......

2 个答案:

答案 0 :(得分:2)

你的

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

返回对const IDrawable*指针向量的const引用。不过你的

vector<IDrawable*>::const_iterator itDrawable; 

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

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

答案 1 :(得分:2)

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

vector<IDrawable*>::const_iterator itDrawable;

您应该使用

vector<const IDrawable*>::const_iterator iDrawable;

同样,你需要

const IDrawable *drawable =...

而不是

IDrawable *drawable =...

所有这一切都归功于您拥有std::vector<const IDrawable*>