c++ - error: no matching function for call to 'std::map -


typedef struct {     string strdatabasename;     set <string, greater<string> > setdbaccname; } userdbainfo_t;  typedef struct {     map<int, userdbainfo_t > mapuserdbainfo; } userdbinfo_t;  typedef set<string, greater<string> > setnames_t;  int main( int argc, char * argv[] ) {     ...     map<string, userdbinfo_t > maphruserdbinfo;      userdbinfo_t structuserdbinfo;     userdbainfo_t structuserdbainfo;      structuserdbainfo.strdatabasename = strdatabasename;     structuserdbainfo.setdbaccname.insert(strdbaccname);      structuserdbinfo.mapuserdbainfo.insert(ndatabaseid, structuserdbainfo);      maphruserdbinfo.insert(make_pair(strsabun, structuserdbinfo));   <--- compile error here      ...  } 

when compile it, got error message.

main.cpp:2778: error: no matching function call 'std::map, std::allocator > >::insert(int&, userdbainfo_t&)' /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_map.h:395: note: candidates are: std::pair, std::_select1st >, _compare, typename _alloc::rebind >::other>::iterator, bool> std::map<_key, _tp, _compare, _alloc>::insert(const std::pair&) [with _key = int, _tp = userdbainfo_t, _compare = std::less, _alloc = std::allocator >] /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../include/c++/4.1.2/bits/stl_map.h:419: note: typename std::_rb_tree<_key, std::pair, std::_select1st >, _compare, typename _alloc::rebind >::other>::iterator std::map<_key, _tp, _compare, _alloc>::insert(typename std::_rb_tree<_key, std::pair, std::_select1st >, _compare, typename _alloc::rebind >::other>::iterator, const std::pair&) [with _key = int, _tp = userdbainfo_t, _compare = std::less, _alloc = std::allocator >]

what might wrong?

the error message, no matching function call 'std::map, std::allocator > >::insert(int&, userdbainfo_t&), indicates me problem in line:

structuserdbinfo.mapuserdbainfo.insert(ndatabaseid, structuserdbainfo); 

not line mentioned in question. should be:

structuserdbinfo.mapuserdbainfo.insert(make_pair(ndatabaseid, structuserdbainfo)); 

if able use c++11 compiler, can use:

structuserdbinfo.mapuserdbainfo.emplace(ndatabaseid, structuserdbainfo); 

Comments