Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::multimap编译错误_C++_Visual Studio 2008_Mfc - Fatal编程技术网

C++ std::multimap编译错误

C++ std::multimap编译错误,c++,visual-studio-2008,mfc,C++,Visual Studio 2008,Mfc,我第一次尝试使用multimap,但我的应用程序无法编译。蒂娅·保罗 // file dept.h typedef std::multimap <CString, std::map< CString, CString> > _DeparmentRecord; // also tryied replacing CString with LPCWSTR _DeparmentRecord DeparmentRecord; // file dept.cpp DWORD

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

// 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

}
//文件dept.h
typedef std::multimap>\u DeparmentRecord;//还尝试用LPCWSTR替换CString
_deparcentrecord deparcentrecord;
//档案部
DWORD CIni::AddNameValue(LPCWSTR节,LPCWSTR名称,LPCWSTR值)
{
插入(std::make_pair(节,std::make_pair(名称,值));带有
1>        [
1> _Kty=CString,
1> _Ty=CString
1>        ]
1> 及
1>        [
1> _Ty1=LPCWSTR,
1> _Ty2=LPCWSTR
1>        ]
1> 及
1>        [
1> _Ty=CString
1>        ]
1> 原因:无法从“const std::pair”转换为“const std::less”
1> 与
1>        [
1> _Ty1=LPCWSTR,
1> _Ty2=LPCWSTR
1>        ]
1> 及
1>        [
1> _Ty=CString
1>        ]
1> 没有可执行此转换的用户定义的转换运算符,或者无法调用该运算符
1> c:\dev\projects\migrator\jobbuilder\jobbuilder\ini.cpp(55):请参阅正在编译的函数模板实例化“std::pair::pair>(const std::pair>&)”
1> 与
1>        [
1> _Ty1=常数CString,
1> _Ty2=std::map
1> ]


===============生成:0成功,1失败,0最新,0跳过==/p>您正在尝试将
插入到采用
的映射中。您正在尝试将
插入采用
的映射中(名称、值)是一对…但它应该是一个映射

STL错误可能是一个真正的难题。使用最新版本的GCC会有所帮助,它的错误消息会有很大的改进,但我看到您使用的是MSVC,所以这对您没有多大帮助。

std::make_pair(名称、值)是一对…但它应该是一个映射


STL错误可能是一个真正的难题。使用最新版本的GCC会有所帮助,它的错误消息会有很大的改进,但我发现您使用的是MSVC,所以这对您没有多大帮助。

除了其他答案之外,std::make\u pair将返回std::pair。不要指望编译器为您执行从LPCWSTR到CString的转换。

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

如下更改函数

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)) ;
}
DWORD AddNameValue(LPCWSTR节,LPCWSTR名称,LPCWSTR值)
{
标准::map aTemp;
aTemp.insert(std::make_pair(名称、值));
脱臂中心线插入件(标准:制作双绞线(截面,aTemp));
}

如下更改功能

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)) ;
}
DWORD AddNameValue(LPCWSTR节,LPCWSTR名称,LPCWSTR值)
{
标准::map aTemp;
aTemp.insert(std::make_pair(名称、值));
脱臂中心线插入件(标准:制作双绞线(截面,aTemp));
}

除了其他正确答案外,如果您使用
\u DeparmentRecord
value\u type
而不是
make\u pair
,您将避免转换问题(并可能得到更好的错误消息)

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

还有一个小问题:不要对非本地名称使用前导下划线-它们是为标准库保留的。

除了其他正确答案外,还可以避免转换问题(并可能得到更好的错误消息)如果您使用
\u DeparmentRecord
值\u type
typedef,而不是
make\u pair

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

还有一个小问题:不要对非本地名称使用前导下划线-它们是为标准库保留的。

你知道,使用最新的MSVC也有帮助。你知道,使用最新的MSVC也有帮助。注意:你将替换节的条目,而不是更新它。但是DepartmentRecord是一个多重映射。所以不会添加新条目吗?注意:您将替换节的条目,而不是更新它。但是DepartmentRecord是一个多重映射。因此不会添加新条目吗?