2016-06-27 19 views
3

のVisual Studioを抑制しないであろう2015コミュニティ版は、デバッグでコンパイルするときに次のエラーを与えるが、リリースでコンパイルしていないとき:のVisual Studio 2015は、エラーC4996

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' 

私は戻って追跡することができましたこのエラーの原因は、this third party libraryの214と242行です。ビットマップイメージを書き込むために使用しています。私はこれらの部分で何が起こっているのか完全に理解していないので、むしろそれを混乱させたくない。


私はこのエラーを無効にしようとしていますが、Visual Studioは私を許可しません。私は他の場所で、in the documentationを提案StackOverflowの上、またはされた以下のソリューションを試してみた:

  • は、プロジェクト設定で「特定の警告を無効にする」フィールドに4996を追加]> [構成プロパティ]> [C/C++]> [詳細設定。
  • [プロジェクトの設定]> [設定のプロパティ]> [デバッグ]の[コマンド引数]フィールドに/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がこのエラーの表示を主張する理由は何でしょうか?

+0

待ち、 '#define -D_SCL_SECURE_NO_WARNINGS'を試しましたか? – Rakete1111

+0

'#pragma warning'の後の空白に問題がある可能性はありますか?あなたはプロジェクトをきれいにしましたか?/ – meepzh

+0

@ Rakete1111もし私がそれを試してみると、それは " - "に "識別子を期待した"と私に伝えます。 '-'がなければ、それでもエラーは出ます。 – FWDekker

答えて

1

警告4996を無効にしても、std :: copy警告には影響しません。ソースファイルの先頭に次のこの警告場所を抑制するためには:

#define _SECURE_SCL_DEPRECATE 0 
#include <algorithm> 
1

はNO_WARN_MBCS_MFC_DEPRECATION

+0

こんにちは、これは便利な答えになるにはもう少しコンテキストが必要です。 – Ben

+0

まあ、本当は、ベン。 #defineのマクロコマンドラインオプションをどのように定義しても問題ありません。これを定義すると警告が消えます – AnEnglishmanInNorway

0

を定義すると、プリプロセッサ定義に_CRT_NONSTDC_NO_WARNINGSを追加します。