Предупреждение касается не «какой-то функции», а всего stdext
. И это не просто ручная работа, которая будет в конечном счете прекращена, устарела: она не поставляется с 2015 годом.
В начале 2000-х велась работа по пересмотру стандарта C++; различные поставщики компиляторов, в том числе Microsoft, представили комитету свои предложения вместе с прототипами. Чтобы их можно было протестировать и оценить, Microsoft поместила реализации предложенных ими расширений в stdext
.
В конце концов комитет выбрал то, что они собирались включить в эту редакцию, и выпустил технический отчет («TR1»). Предвидя завершение до конца 2009 года, это называлось «C++0x», и поставщики компиляторов начали реализовывать эти функции в пространстве имен tr1
. Наконец, в 2011 году стандарт был доработан, и мы вернули «C++11» со всеми его частями в std
, где они и должны быть.
Согласно предложению Microsoft, контейнер должен быть std::hash_map
, но комитет C++ решил использовать термин unordered_map
. std::map
— упорядоченный контейнер, stdext::hash_map
, несмотря на название, — нет.
Компилятор Microsoft был самым медленным в завершении полной поддержки C++11, и с тех пор комитет по стандартам закончил второй вариант (C++14) и работает над третьим (C++17). Microsoft почти закончила C++11 в VS2015 и большую часть C++14, за некоторыми существенными исключениями, которые, по-видимому, станут серьезной проблемой для компилятора VS (например, constexpr и переменные шаблона).
Visual Studio 2015 не поддерживает stdext
– он исчез. Это не один из тех случаев, когда "ну, со временем это может исчезнуть".
stdext
относится к семейству компиляторов Microsoft, поэтому написание кода с использованием stdext::
чего-либо невозможно: http://ideone.com/x8GsKY
Стандартная версия нужной вам функции — std::unordered_map. следует использовать это. Это по сути то же самое.
В stdext::hash_map
есть нерешенные ошибки.
Если вам действительно нужно использовать stdext::hash_map
, отключите предупреждение, добавив
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
в верхней части stdafx.h
я предполагаю, что ваш проект есть, или в ваших файлах заголовков перед вами #include <stdext/...>
, или в обозревателе решений:
- Щелкните правой кнопкой мыши запись вашего проекта в обозревателе решений,
- Выберите Свойства,
- Выберите Конфигурация:
All Configurations
,
- Разверните запись дерева
C/C++
,
- Выберите
Preprocessor
,
- В «Определениях препроцессора», вероятно, будет указано
<different options>
- В начале записи «Определения препроцессора» добавьте
_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1;
, чтобы она читалась как _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1;<different options>
. (или то, что там было изначально, должно следовать за ;
)
person
kfsone
schedule
25.05.2015
_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
в определения вашего препроцессора. Это должно быть в разделе c/c++ настроек вашего проекта. - person drescherjm   schedule 25.05.2015<hash_map>
и<hash_set>
? - person user253751   schedule 25.05.2015