【发布时间】:2012-06-24 15:37:41
【问题描述】:
我有一个项目在 MSVS 2010 SP1 下运行良好。 我正在尝试将其转换为 MSVS 2012 RC。我不得不更改一些东西,主要与 C++ 头文件/lib 路径和 MFC 自定义内容有关。但我还有最后一个障碍要清除。
在 MSVC 2010 中,我使用了很多 unordered_map<basic_string<TCHAR>, int> 或 map<basic_string<TCHAR>, int>。它编译得很好。但在 MSVS 2012 中,我只收到此错误:
“C++ 标准不提供这种类型的哈希”
在网上搜索了一下,发现MSVS 2012应该更接近C++11标准,标准只定义了基本类型的哈希函数和4种定义的字符串类型(其中@987654323 @ 和 wstring,但不包括 basic_string)。
所以我将所有basic_string<TCHAR> 更改为wstring 但无济于事......我仍然遇到同样的错误。
我应该怎么做才能再次编译我的应用程序?
【问题讨论】:
-
可能在 VS2010 中,您禁用了多字节,因此
TCHAR映射到char,现在您启用了多字节字符,因此TCHAR映射到wchar_t。尝试在项目属性中更改这些设置。 -
basic_string<TCHAR>是std::string或std::wstring(两者都只是 typedefs),具体取决于您的项目设置。 C++11 的唯一区别是字符串hash<>现在在<string>中,而不是<functional>。 -
感谢 Bo,我必须在任何地方都包含
,而在此之前我不需要这样做。我必须等待 6 个小时才能给出答案...与此同时,您可以自己动手 :) -
@OOEngineer:这已经是一个错误,不管
hash<>。std::basic_string<TCHAR>需要<string>。 -
MSalters:好吧,我想你可以告诉 VC++ 团队,他们的标准库实现中仍然存在一个大错误......
标签: c++ string map c++11 visual-studio-2012