我有一个在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种定义的字符串类型的哈希函数(其中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 。

09-25 21:20