我有一个这样声明的类:

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/

10-11 18:25