操作数“=”和“!=”的向量错误迭代器
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<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 对吧? 我不知道要改变什么......
【问题讨论】:
你看不出getDrawables()
返回的类型和你声明迭代器的类型有什么区别?
大声笑,不,我没有哈哈:p
不,这是唯一的吸气剂...
【参考方案1】:
你的
const std::vector<const IDrawable*>& getDrawables() const
返回对const IDrawable*
指针向量的常量引用。然而你的
vector<IDrawable*>::const_iterator itDrawable;
将const_iterator
声明为不同类型的向量(IDrawable*
,而不是const IDrawable*
)。将定义更改为vector<const IDrawable*>::const_iterator itDrawable;
或简单地使用auto
在for
循环中声明迭代器,
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<const IDrawable*>
。
【讨论】:
以上是关于操作数“=”和“!=”的向量错误迭代器的主要内容,如果未能解决你的问题,请参考以下文章