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吗? 我不知道有什么需要改变......
答案 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;
或仅使用auto
在for
循环中声明迭代器,
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*>
。