std :: multimap编译错误

时间:2009-05-28 11:07:28

标签: c++ visual-studio-2008 mfc

我第一次尝试使用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跳过==========

5 个答案:

答案 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

还有一点:不要使用前导下划线表示非本地名称 - 它们是为标准库保留的。