2013-02-22 43 views
5

के लिए कोई मिलान नहीं है, पहले कोड स्निपेट में कोड C++ को ध्यान में रखते हुए, मुझे दूसरी स्निपेट में संकलन त्रुटियों को इंगित किया जा रहा है। ऐसा लगता है कि वेक्टर उदाहरण का पीछा करते समय मैं गलत कर रहा हूं। क्या आप मुझे बता सकते हैं कि मैं इन संकलन समस्याओं को कैसे दूर कर सकता हूं? धन्यवाद। लाइन 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> >&’ 

उत्तर

6

copyinconst VipAddressSetEntity है और इसलिए copyin.mVipAddressList भी const है। पर const std::vector<VipAddressEntity> पर कॉल करने से आपको std::vector<VipAddressEntity>::const_iterator प्रकार का एक अपरिवर्तनीय पुनरावर्तक मिलेगा। बस सुनिश्चित करें कि आपके iter उस प्रकार के बहुत है और आप ठीक इसे करने के लिए आवंटित करने के लिए सक्षम हो जाएगा:

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

इस लाइन पर:

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

आप एक std::vector<VipAddressEntity>::iterator असाइन नहीं कर सकतेcopyin.mVipAddressList.begin() से copyin आधार है। इसके बजाय const_iterator का उपयोग करें।

2

copyin एक स्थिरांक संदर्भ है। आपको फिर से करने के लिए const_iterator का उपयोग करना चाहिए।