c++ - 将 MSVS 2010 项目转换为 MSVS 2012 RC 但出现错误 "The C++ standard doesn' t 为此类型提供哈希”

标签 c++ string map c++11 visual-studio-2012

我有一个项目在 MSVS 2010 SP1 下运行良好。 我正在尝试将其转换为 MSVS 2012 RC。我不得不更改一些内容,主要与 C++ header /lib 路径和 MFC 自定义内容有关。但我还有最后一个障碍需要清除。

在 MSVC 2010 中,我使用了很多 unordered_map<basic_string<TCHAR>, int>map<basic_string<TCHAR>, int> 。它编译得很好。但是在 MSVS 2012 中,我只是得到这个错误: “C++ 标准不提供这种类型的散列”

在网上搜索了一下,发现MSVS 2012应该更接近C++11标准,标准只定义了基本类型的哈希函数和定义的4种字符串类型(其中stringwstring ,但不包括 basic_string )。 所以我将所有 basic_string<TCHAR> 更改为 wstring 但无济于事......我仍然遇到同样的错误。

我应该怎么做才能再次编译我的应用程序?

最佳答案

显然 OOEngineer 使用了 basic_string不包括 <string> header 。无论如何,部分功能可能是可见的,通过其他 header 的间接包含。

VS2010发布时,当时提出的标准把所有std::hash<> <functional> 特化 header 。在最终的 C++11 标准中,决定最好将它们与各自的容器放在一起,所以一些 hash<>特化已移至 <string> , <vector>

所以,要使用 std::string 的所有(或任何,真的)功能, 你必须包括 <string>自己 header ,而不是依赖另一个系统 header 。

关于c++ - 将 MSVS 2010 项目转换为 MSVS 2012 RC 但出现错误 "The C++ standard doesn' t 为此类型提供哈希”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11154481/

相关文章:

c - 如何在C中从这种类型的字符串中获取数字

c++ - std::map 中 find() 的时间复杂度?

c++ - 部分匹配 std::map 中的长键

c++ - 为什么这个打印内存地址而不是值

c++ - typedef 的替代方法或将 typedef 与 if else 一起使用的正确方法

c++ - 在两个线程之间传递数据时的时间不一致

string - 如何使用 sed 在 bash 脚本中追加字符串?

java - 如何在ScrollView的底部添加字符串

scala - 为什么可以在没有应用方法的情况下创建 Map 对象?

c++ - 帮助我理解这个奇怪的 C++ 代码