我第一次尝试使用multimap,但我的应用程序无法编译。 TIA Paul ..
// 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
}
c:\ program files \ microsoft visual studio 9.0 \ vc \ include \ utility(57):错误C2664:'std :: map&lt; _Kty,_Ty&gt; :: map(const std :: less&lt; _Ty&gt;&amp; )':无法从'const std :: pair&lt; _Ty1,_Ty2&gt;'转换参数1到'const std :: less&lt; _Ty&gt; &安培;'
1&GT;同 1 GT; [ 1 GT; _Kty = CString的, 1 GT; _Ty = CString的 1 GT; ] 1 GT;和 1 GT; [ 1 GT; _Ty1 = LPCWSTR, 1 GT; _Ty2 = LPCWSTR 1 GT; ] 1 GT;和 1 GT; [ 1 GT; _Ty = CString的 1 GT; ] 1 GT;原因:无法转换为'const std :: pair&lt; _Ty1,_Ty2&gt;'到'const std :: less&lt; _Ty&gt;' 1 GT;同 1 GT; [ 1 GT; _Ty1 = LPCWSTR, 1 GT; _Ty2 = LPCWSTR 1 GT; ] 1 GT;和 1 GT; [ 1 GT; _Ty = CString的 1 GT; ] 1 GT;没有可用于执行此转换的用户定义转换运算符,或者无法调用运算符 1 GT; c:\ dev \ projects \ migrator \ jobbuilder \ jobbuilder \ ini.cpp(55):参见函数模板实例化'std :: pair&lt; _Ty1,_Ty2&gt; :: pair&gt;(const std :: pair&gt;&amp;) '正在编译 1 GT;同 1 GT; [ 1 GT; _Ty1 = const CString, 1 GT; _Ty2 =标准::地图 1 GT; ]
==========构建:0成功,1失败,0最新,0跳过==========
答案 0 :(得分:3)
您尝试将pair< section, pair<...> >
插入到pair< section, map<...> >
的地图中。
答案 1 :(得分:3)
按如下方式更改功能。
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 :(得分:2)
std :: make_pair(Name,Value)是一对......但它应该是一张地图。
STL错误可能是一种真正的痛苦。使用最新版本的GCC可以提供帮助,它的错误信息得到了很大改善,但我发现你使用的是MSVC,这对你没什么帮助。
答案 3 :(得分:1)
除了其他答案,std :: make_pair将返回一个std :: pair。不要指望编译器为您执行从LPCWSTR到CString的转换。
答案 4 :(得分:1)
除了其他正确答案之外,如果您使用_DeparmentRecord
的{{1}} typedef而不是value_type
,则可以避免转换问题(并且可能会收到更好的错误消息)。< / p>
make_pair
还有一点:不要使用前导下划线表示非本地名称 - 它们是为标准库保留的。