C++哈希弃用警告

Ter*_*nko 2 c++ deprecated deprecation-warning

我对C++和编程非常陌生,目前正在使用Bjarne Stroustrup的编程:使用C++的原理和实践.我一直收到以下错误

严重性代码说明项目文件行错误C2338已弃用,将被删除.请用 .您可以定义_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS以确认您已收到此警告.

我理解头文件std_lib_facilities.h使用某种不推荐使用的函数,但有没有办法绕过这个?看起来它要我定义"_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS",但我不确定如何做到这一点.任何帮助,将不胜感激!!

kfs*_*one 11

警告不是关于"某种功能" - 它是关于整体的stdext.它不仅仅是手工波浪状的,最终会被停产,也不会弃用:它不会随着2015年出货.

在00年代早期,正在努力修改C++标准; 包括微软在内的不同编译器供应商将提案与原型一起提交给委员会.因此,他们可以进行测试和评估,微软将其提议的扩展实施stdext.

最终,委员会选择了他们将在该修订中纳入的内容,并发布了技术报告("TR1").预计在2009年底之前完成,这被称为"C++ 0x",编译器供应商开始在tr1命名空间中实现这些功能.终于在2011年,标准最终确定了,我们得到了"C++ 11",其所有的部分和碎片都回到了std它们所属的位置.

根据微软的提议,容器将是std::hash_map,但C++委员会选择使用该术语unordered_map.std::map是一个有序的容器,stdext::hash_map尽管名称,但不是.

微软的编译器在获得完整的C++ 11支持方面是最慢的,标准委员会已经完成了第二个变体(C++ 14)并且正在开发第三个变量(C++ 17).微软只是关于完成VS2015中的C++ 11以及大量的C++ 14,其中有一些重要的例外显然是VS编译器的主要问题(特别是constexpr和模板变量).

  1. Visual Studio 2015没有提供stdext- 它已经消失了.这不是那些"好吧,它可能最终消失"的案例之一.

  2. stdext特定于Microsoft系列编译器,因此使用stdext::任何东西编写代码都不可移植:http://ideone.com/x8GsKY

  3. 您想要的功能的标准化版本是std :: unordered_map,您应该使用它.这基本上是一回事.

  4. 还有未解决的错误stdext::hash_map.

如果你真的必须使用stdext::hash_map,请通过添加来消除警告

#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
Run Code Online (Sandbox Code Playgroud)

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>.(或者原本应该遵循的任何东西;)