在使用Visual Studio 2015社区版进行调试编译时,会出现以下错误,但在发布编译时不会出现:
std::copy::_Unchecked_iterators::_Deprecate': Call to 'std::copy' with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
我能够追溯到我使用的第三方库中的214和242行,这是导致错误的源头。我不完全理解这些部分正在发生什么,所以我宁愿不去碰它。
我正在尝试禁用这个错误,但是Visual Studio不允许我这样做。我已经尝试了在文档中、StackOverflow或其他地方提出的以下解决方案:
- 在项目设置 > 配置属性 > C/C++ > 高级中的“禁用特定警告”字段中添加
4996
。 - 在项目设置 > 配置属性 > 调试中的“命令参数”字段中添加
/wd4996
。 - 在有问题的文件顶部和/或有问题的函数上方添加
#pragma warning (disable : 4996)
。 - 在项目设置 > 配置属性 > C/C++ > 预处理器中的“预处理器定义”字段中添加
_SCL_SECURE_NO_WARNINGS
、_SCL_NONSTDC_NO_WARNINGS
、_SCL_OBSOLETE_NO_WARNINGS
、_SCL_SECURE_NO_WARNINGS_GLOBAL
及其组合。 - 使用
#define
指令将前一个解决方案中的定义添加到有问题的文件顶部。 - 使用前缀为
/D
或-D
的方式将前一个解决方案中的定义添加到“命令参数”字段中。
但是这些对我都没有解决问题。
为什么Visual Studio一直坚持显示这个错误,可能的原因是什么?
#define -D_SCL_SECURE_NO_WARNINGS
吗? - Rakete1111#pragma warning
后面的空格可能会有问题吗?你清理了项目吗?抱歉,只是随便提出一些想法,以防万一 :/ - meepzhwarning
后面以及冒号周围加上空格,但都没能解决它。清理解决方案和项目,重新构建也无法解决问题。 - FWDekker#pragma warning
确实起了作用。 - Sean Werkema