错误:调用 'std::map 没有匹配函数

error: no matching function for call to 'std::map

本文关键字:函数 map std 调用 错误      更新时间:2023-10-16
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
    ...
}

当我编译它时,我得到错误信息。

main.cpp:2778:错误:没有匹配函数调用'std::map, std::allocator>>::insert(int&, UserDBAInfo_t&)' '/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../包括/c++/4.1.2/位/stl_map.h: 395:注意:候选人:std::pair>, std::_Select1st>, _Compare, typename _Alloc::rebind>::other>::iterator, bool> std::map<_Key, _Tp>>::other>) [with _Key = int, _Tp = UserDBAInfo_t, _Compare = std::less, _Alloc = std::allocator>]/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../包括/c++/4.1.2/位/stl_map.h: 419:注意:typename std::_Rb_tree<_Key, _Tp>>, std::pair>, _Compare, typename _Alloc::rebind>::other>::iterator std::map<_Key, _Tp>>, std::map<_Key, _Tp>, std:: select1st>, _Compare, typename _Alloc::rebind>, typename _Alloc::rebind>;const std::pair&) [with _Key = int, _Tp = UserDBAInfo_t, _Compare = std::less, _Alloc = std::allocator>]

怎么了?

错误消息no matching function for call to 'std::map, std::allocator > >::insert(int&, UserDBAInfo_t&)向我表明问题在以下行:

structUserDBInfo.mapUserDBAInfo.insert(nDatabaseID, structUserDBAInfo);

不是你在问题中提到的那一行。应该是:

structUserDBInfo.mapUserDBAInfo.insert(make_pair(nDatabaseID, structUserDBAInfo));

如果你能使用c++ 11编译器,你也可以使用:

structUserDBInfo.mapUserDBAInfo.emplace(nDatabaseID, structUserDBAInfo);