c++ - std::vector inserting std::pair -
i having trouble trying insert std::pair in std::vector, code:
template <class r> class avectorcontainner { public: avectorcontainner() { mvector= new std::vector<entry>; } typedef std::pair<int ,r *> entry; void insert(r* apointer, int aid) { entry aentry; aentry=std::make_pair(aid,apointer ); mvector->push_back(aentry); } private: std::vector<entry> * mvector; } this part of main file, declare pointer of class , used in initialization of template class.
in main.cpp:
int main() { sometype * atipe= new sometype; int aid=1; avectorcontainer<sometype> * acontainer= new avectorcontainer; acontainer->insert(atipe,aid);//error line delete atipe; delete acontainer; return 0; } compiler output:
error: non-static reference member 'const int& std::pair<const int&, sometype *>::first', can't use default assignment operator error: value-initialization of reference type 'const int&'
the original poster failed post code causing problem.
he has since edited post correct code demonstrates problem. code demonstrates problem follows:
template <class r, typename b=int> class avectorcontainer { public: avectorcontainer() {} typedef r* ptr_type; typedef const b & const_ref_type; typedef std::pair<const_ref_type ,ptr_type> entry; void insert(ptr_type apointer, const_ref_type aid) { entry aentry=std::make_pair(aid,apointer); mvector.push_back(aentry); } private: std::vector<entry> mvector; }; class sometype { public: sometype(){ x=5; } ~sometype(){ } int x; }; int main() { sometype * atipe= new sometype; int aid=1; avectorcontainer<sometype> acontainer; acontainer.insert(atipe,aid); return 0; } compiler output:
/usr/include/c++/4.7/bits/stl_pair.h:88: error: non-static reference member 'const int& std::pair<const int&, sometype*>::first', can't use default assignment operator the flaw in these lines:
typedef r* ptr_type; typedef const b & const_ref_type; typedef std::pair<const_ref_type ,ptr_type> entry; std::vector<entry> mvector; here, original poster attempts make vector of pairs contain constant reference, , this:
entry aentry; aentry=std::make_pair(aid,apointer ) this attempts assign 1 pair another. const& variables cannot assigned -- can constructed (initialized) const&, not assigned.
an easy fix is:
entry aentry=std::make_pair(aid,apointer ) so not constructing aentry entry, instead of default constructing aentry (which illegal: const& must initialized), assigning it.
Comments
Post a Comment