Tengo un proyecto que funciona bien bajo MSVS 2010 SP1. Estoy tratando de convertirlo a MSVS 2012 RC. Tuve que cambiar algunas cosas, principalmente relacionadas con rutas de cabecera/lib de C++ y material personalizado de MFC. Pero tengo un último obstáculo que limpiar.Conversión del proyecto MSVS 2010 a MSVS 2012 RC pero aparece el error "El estándar C++ no proporciona un hash para este tipo"
En MSVC 2010, estoy usando un montón de unordered_map<basic_string<TCHAR>, int>
o map<basic_string<TCHAR>, int>
. Compila bien. Pero en MSVS 2012, acabo de recibir este error: "El estándar de C++ no proporciona un hash para este tipo"
Después de buscar un poco en la red, descubrí que MSVS 2012 debería estar más cerca del C++ 11 estándar, y que el estándar solo define funciones hash para tipos básicos y 4 tipos de cadenas definidas (entre ellas string
y wstring
, pero basic_string
no incluidas). Así que cambié todos basic_string<TCHAR>
a wstring
pero fue en vano ... Todavía recibo el mismo error.
¿Qué debo hacer para poder volver a compilar mi aplicación?
Probablemente en VS2010 tenía deshabilitado multibyte, por lo que 'TCHAR' mapeado a' char' y ahora tiene caracteres multibyte habilitados para que 'TCHAR' se asigne a' wchar_t'. Intente cambiar esta configuración en las propiedades del proyecto. – RedX
'basic_string' es 'std :: string' o' std :: wstring' (ambos simplemente typedefs), dependiendo de la configuración de su proyecto. La única diferencia en C++ 11 es que la cadena 'hash <>' ahora está en '' y no ''. –
Gracias Bo, tuve que incluir en todas partes, mientras que antes no tenía que hacerlo. Tengo que esperar 6 horas antes de poder dar una respuesta ... Mientras tanto, siéntete libre de hacerlo tú mismo :) –
OOEngineer