Converting MSVS 2010 project to MSVS 2012 RC but get error “The C++ standard doesn't provide a hash for this type”

南楼画角 提交于 2019-12-23 09:11:59

问题


I have a project working fine under MSVS 2010 SP1. I'm trying to convert it to MSVS 2012 RC. I had to change some stuff, mainly related to C++ header/lib paths and MFC custom stuff. But I have one last hurdle to clear.

In MSVC 2010, I'm using a lot of unordered_map<basic_string<TCHAR>, int> or map<basic_string<TCHAR>, int>. It compiles fine. But in MSVS 2012, I just get this error: "The C++ standard doesn't provide a hash for this type"

After searching a bit on the net, I found out that MSVS 2012 should be more close to the C++11 standard, and that the standard only defines hash functions for basic types and 4 defined string types (among them string and wstring, but basic_string not included). So I changed all basic_string<TCHAR> to wstring but to no avail... I still get the same error.

What should I do to be able to compile my app again?


回答1:


Apparently OOEngineer used basic_string without including the <string> header. Part of the functionality might be visible anyway, through indirect includes by other headers.

When VS2010 was released, the then proposed standard put all std::hash<> specializations in the <functional> header. In the final C++11 standard it was decided that it was better to put these together with the respective container, so some hash<> specializations were moved to <string>, <vector>, etc.

So, to used all (or any, really) functionality of std::string, you have to include the <string> header yourself and not rely on another system header doing so.



来源:https://stackoverflow.com/questions/11154481/converting-msvs-2010-project-to-msvs-2012-rc-but-get-error-the-c-standard-doe

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!