[英]Vector Iterator: no match for ‘operator=’
考虑下面第一个代码片段中的代码C ++,我得到第二个代码段中指示的编译错误。 看起来我在遍历矢量实例时做错了。 你能告诉我如何克服这些编译问题吗? 谢谢。 代码中标记了LINE 171。
SNIPPET 1(代码)
#include <string>
#include <vector>
#include <iterator>
class VipAddressSetEntity : BaseEntity
{
public:
VipAddressSetEntity() : BaseEntity() { }
VipAddressSetEntity(std::string &uuid, std::string &name) : BaseEntity(uuid, name) { }
VipAddressSetEntity(const VipAddressSetEntity ©in)
{
setUUID(copyin.getUUID());
setName(copyin.getName());
std::vector<VipAddressEntity>::iterator iter;
/* LINE 171 is the following*/
for( iter = copyin.mVipAddressList.begin(); iter != copyin.mVipAddressList.end(); iter++ )
{
addVipAddress(*iter);
}
}
VipAddressSetEntity operator = (const VipAddressSetEntity &rhs)
{
setUUID(rhs.getUUID());
setName(rhs.getName());
std::vector<VipAddressEntity>::iterator iter;
for( iter = rhs.mVipAddressList.begin(); iter != rhs.mVipAddressList.end(); iter++ )
{
addVipAddress(*iter);
}
return *this;
}
void addVipAddress(VipAddressEntity &entity)
{
mVipAddressList.push_back(entity);
}
VipAddressEntity & getVipAddress(std::string uuid)
{
std::vector<VipAddressEntity>::iterator iter;
for( iter = mVipAddressList.begin(); iter != mVipAddressList.end(); iter++ )
{
if(iter->getUUID() == uuid)
{
return *iter;
}
}
return NULL;
}
const std::vector<VipAddressEntity>& getVipAddressList() const { return mVipAddressList; }
private:
std::vector<VipAddressEntity> mVipAddressList;
};
SNIPPET 2(编译输出)
Entity.hpp: In copy constructor ‘ECLBCP::VipAddressSetEntity::VipAddressSetEntity(const ECLBCP::VipAddressSetEntity&)’:
Entity.hpp:171:44: error: no match for ‘operator=’ in ‘iter = copyin.ECLBCP::VipAddressSetEntity::mVipAddressList.std::vector<_Tp, _Alloc>::begin<ECLBCP::VipAddressEntity, std::allocator<ECLBCP::VipAddressEntity> >()’
Entity.hpp:171:44: note: candidates are:
In file included from /usr/include/c++/4.7/bits/stl_algobase.h:68:0,
from /usr/include/c++/4.7/bits/char_traits.h:41,
from /usr/include/c++/4.7/string:42,
from Entity.hpp:11:
/usr/include/c++/4.7/bits/stl_iterator.h:710:11: note: __gnu_cxx::__normal_iterator<ECLBCP::VipAddressEntity*, std::vector<ECLBCP::VipAddressEntity> >& __gnu_cxx::__normal_iterator<ECLBCP::VipAddressEntity*, std::vector<ECLBCP::VipAddressEntity> >::operator=(const __gnu_cxx::__normal_iterator<ECLBCP::VipAddressEntity*, std::vector<ECLBCP::VipAddressEntity> >&)
/usr/include/c++/4.7/bits/stl_iterator.h:710:11: note: no known conversion for argument 1 from ‘std::vector<ECLBCP::VipAddressEntity>::const_iterator {aka __gnu_cxx::__normal_iterator<const ECLBCP::VipAddressEntity*, std::vector<ECLBCP::VipAddressEntity> >}’ to ‘const __gnu_cxx::__normal_iterator<ECLBCP::VipAddressEntity*, std::vector<ECLBCP::VipAddressEntity> >&’
copyin
是一个const VipAddressSetEntity
,因此copyin.mVipAddressList
也是const
。 在const std::vector<VipAddressEntity>
上调用begin
会给你一个std::vector<VipAddressEntity>::const_iterator
类型的不可变迭代器。 只要确保你的iter
也属于那种类型,你就可以分配给它了:
std::vector<VipAddressEntity>::const_iterator iter;
在这一行:
for( iter = copyin.mVipAddressList.begin(); iter != copyin.mVipAddressList.end(); iter++)
您不能从copyin.mVipAddressList.begin()
分配std::vector<VipAddressEntity>::iterator
,因为copyin
是const。 请const_iterator
。
copyin
是一个const引用。 您应该使用const_iterator
进行迭代。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.