簡體   English   中英

Vector Iterator:'operator ='不匹配

[英]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 &copyin)
      {
       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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM