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