我有一个这样声明的类:
class Level
{
private:
std::vector<mapObject::MapObject> features;
(...)
};
在其成员函数之一中,我尝试遍历该 vector ,如下所示:
vector<mapObject::MapObject::iterator it;
for(it=features.begin(); it<features.end(); it++)
{
/* loop code */
}
这对我来说似乎很简单,但是g++给了我这个错误:
src/Level.cpp:402: error: no match for ‘operator=’ in ‘it = ((const yarl::level::Level*)this)->yarl::level::Level::features.std::vector<_Tp, _Alloc>::begin [with _Tp = yarl::mapObject::MapObject, _Alloc = std::allocator<yarl::mapObject::MapObject>]()’
/usr/include/c++/4.4/bits/STL_iterator.h:669:注意:候选对象为:__gnu_cxx::__normal_iterator<yarl::mapObject::MapObject*,
std::vector>>&__gnu_cxx::__normal_iterator<yarl::mapObject::MapObject*,
std::vector> >::operator=(const __gnu_cxx::__normal_iterator<yarl::mapObject::MapObject*, ``std::vector<yarl::mapObject::MapObject, std::allocator<yarl::mapObject::MapObject> > >&)
有人知道为什么会这样吗? 最佳答案
我猜这部分错误描述了您的问题:
(const yarl::level::Level*)this
在其中找到此代码的成员函数是否是const限定的成员函数?如果是这样,则需要使用const_iterator
:
vector<mapObject::MapObject>::const_iterator it;
如果成员函数是const限定的,则仅const限定的成员 vector 上begin()
和end()
的重载将可用,并且它们都返回const_iterator
。关于c++ - 使用std::vector运算符=不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3041673/