我有一个项目在 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种字符串类型(其中string
和wstring
,但不包括 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/