代码之家  ›  专栏  ›  技术社区  ›  Canacourse

std::multimap编译错误

  •  1
  • Canacourse  · 技术社区  · 17 年前

    我第一次尝试使用multimap,但我的应用程序无法编译。TIA保罗。。

    // file dept.h
    
    typedef std::multimap <CString, std::map< CString, CString> > _DeparmentRecord;  // also tryied replacing CString with LPCWSTR
    
    _DeparmentRecord DeparmentRecord;
    
    
    // file dept.cpp
    
    DWORD CIni::AddNameValue(LPCWSTR Section, LPCWSTR Name, LPCWSTR Value)
    {
    
    DeparmentRecord.insert(std::make_pair ( Section, std::make_pair(Name, Value)) );  <-- error here
    
    }
    

    1>随着 1>_Kty=C字符串, 1>和 1> [ 1>_Ty1=LPCWSTR, 1> ] 1>和 1> [ 1> ] 1>原因:无法从'const std::pair<转换;_Ty1、_Ty2>;'to'const std::less<_Ty>' 1>随着 1> [ 1>_Ty1=LPCWSTR, 1>_Ty2=LPCWSTR 1> ] 1>和 1> [ 1>_Ty=字符串 1> ] 1>没有用户定义的转换运算符可以执行此转换,或者无法调用该运算符 1>c:\dev\projects\migrator\jobbuilder\jobbuilder\ini.cpp(55):参见函数模板实例化“std::pair<_Ty1、_Ty2>;*配对>(const std::pair>&)'正在编译中 1>随着 1> [ 1>_Ty1=常量字符串, 1>_Ty2=std::map 1> ]

    5 回复  |  直到 17 年前
        1
  •  3
  •   Shino C G    17 年前

    DWORD AddNameValue(LPCWSTR  Section, LPCWSTR  Name, LPCWSTR  Value)
    {
        std::map<CString, CString> aTemp;
        aTemp.insert(std::make_pair (Name, Value));
        DeparmentRecord.insert(std::make_pair (Section, aTemp)) ;
    }
    
        2
  •  3
  •   xtofl Adam Rosenfield    17 年前

    您正试图插入 pair< section, pair<...> > 进入一张地图 pair< section, map<...> > .

        3
  •  2
  •   Dietrich Epp    17 年前

    std::make_pair(名称,值)是一对。..但它应该是一张地图。

        4
  •  1
  •   Dave Van den Eynde    17 年前

    除了其他答案之外,std::make_pair还将返回一个std::pair。不要指望编译器会为你执行从LPCWSTR到CString的转换。

        5
  •  1
  •   James Hopkin    17 年前

    除了其他正确答案外,如果您使用 _DeparmentRecord s value_type typedef而不是 make_pair .

    DWORD AddNameValue(LPCWSTR Section, LPCWSTR Name, LPCWSTR Value)
    {
      _DeparmentRecord::iterator i =
          DeparmentRecord.insert(_DeparmentRecord::value_type(Section, v)).first;
      i->second[Name] = Value;
    }