我对 C++ 和一般编程非常陌生,目前正在阅读 Bjarne Stroustrup 的编程:使用 C++ 的原理和实践。我一直收到以下错误
严重性代码 说明 项目文件行错误 C2338 是
已弃用并将被删除。请使用。你可以
定义 _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 以确认
您已收到此警告。
我知道头文件 std_lib_facilities.h 使用某种已弃用的函数,但有没有办法绕过这个?看起来它希望我定义“_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS”,但我不确定如何做到这一点。任何帮助,将不胜感激!!
该警告不是关于“某些功能” - 而是关于整个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
尽管有这个名字,但事实并非如此。
Microsoft 的编译器在完成完整的 C++11 支持方面速度最慢,标准委员会此后完成了第二个变体 (C++14),并正在开发第三个变体 (C++17)。 Microsoft 即将在 VS2015 中完成 C++11 和 C++14 的大部分工作,但有一些明显的例外情况显然将成为 VS 编译器的主要问题(特别是 constexpr 和模板变量)。
Visual Studio 2015不提供stdext
- it's gone.这不是那些“好吧,它最终可能会消失”的案例之一。
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++
树入口,
- Select
Preprocessor
,
- “预处理器定义”可能会说
<different options>
- 在“预处理器定义”条目的开头添加
_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1;
所以它读作_SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS=1;<different options>
。
(或者最初存在的任何内容都应该遵循;
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)