6

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

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

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

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

4

1 回答 1

8

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

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

因此,要使用 的所有(或任何真正的)功能std::string,您必须自己包含<string>标头,而不是依赖另一个系统标头这样做。

于 2012-06-22T13:21:38.533 回答