Предупреждение не о «некоторой функции» - речь идет о целом stdext
. И это не просто ручная волна, которая должна быть прекращена. в конечном итоге, устаревший: не поставляется с 2015 года.
В начале работы 00 было готово пересмотреть стандарт 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-компилятора (esp 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
,
- The "Препроцессора Определения", вероятно, сказать,
<different options>
- В начале «Препроцессора Определения "введите
_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1;
, чтобы он читал _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1;<different options>
. (или что там был первоначально должен следовать ;
)
какой компилятор вы используете? кажется, что вы не используете компилятор GNU C++ (g ++) – Mox
Выглядит как ошибка Visual Studio. Поместите '_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS' в свои определения препроцессора. Это должно быть в разделе c/C++ настроек вашего проекта. – drescherjm
Не использовать '' и ''? –
immibis