2013-02-22 15 views
5

Considerando il codice C++ nel primo snippet di codice riportato di seguito, ricevo gli errori di compilazione indicati nel secondo snippet. Sembra che st mi stia sbagliando quando attraversi l'istanza del vettore. Puoi dirmi come posso superare questi problemi di compilazione? Grazie. LINE 171 è segnato nel codice.Vector Iterator: nessuna corrispondenza per 'operator ='

SNIPPET 1 (Codice)

#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 (uscita Compilation)

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> >&’ 

risposta

6

copyin è un const VipAddressSetEntity e quindi copyin.mVipAddressList è anche const. La chiamata a begin su un const std::vector<VipAddressEntity> ti darà un iteratore immutabile di tipo std::vector<VipAddressEntity>::const_iterator. Basta assicurarsi che il iter è di quel tipo troppo e sarete in grado di assegnare ad esso più che bene:

std::vector<VipAddressEntity>::const_iterator iter; 
2

Su questa linea:

for(iter = copyin.mVipAddressList.begin(); iter != copyin.mVipAddressList.end(); iter++) 

Non è possibile assegnare un std::vector<VipAddressEntity>::iteratorda copyin.mVipAddressList.begin() perché copyin è const. Utilizzare invece const_iterator.

2

copyin è un riferimento const. Dovresti usare un const_iterator per iterare.

Problemi correlati