最近追加しました:
_#define NOMINMAX
#include <Windows.h>
#include <algorithm>
_
使用するために私のmain.cppに
_std::max( x , x ); // x is just a placeholder and not actual anything
std::min( x , x );
_
しかし、私は他のファイルでstd::max()/std::min()
を使用できません。
_error C2589: '(' : illegal token on right side of '::'
error C2059: syntax error : '::'
_
他のファイルに_#define NOMINMAX
_を追加しようとしましたが、失敗しました。手がかりは何ですか?
私は尋ねる前に周りを見回しましたが、答えがわかりません Visual C++でのNOMINMAXで起こりうる問題
本当に必死なら、関数名を括弧で囲んでください:
(std::min)(x, y);
この構文は、関数のようなマクロを適用しません。 (正式には、関数のようなマクロを適用するには、マクロの名前の後にオプションの空白文字と '('が続く必要があります。)
コンパイラフラグを介してNOMINMAX
を定義します。
> cl.exe -DNOMINMAX ...
これは、すべてのソースファイルに対して定義されます。私はIDEを使用しませんが、このページではIDEを設定してこれを設定するためのガイダンスを提供します: WindowsプログラムでSTLを使用すると最小/最大の競合が発生する :
NOMINMAXプリプロセッサシンボルを定義するだけです。これは、Developer Studioプロジェクトの[ビルド]、[設定]、[C/C++]タブの[プリプロセッサ]カテゴリで実行できます。これにより、Windef.hの最小および最大の定義が抑制されます。
STLバージョンを好むためにNOMINMAXを定義すると、min/maxマクロを使用するgdiplus.hをインクルードするときに問題が発生する可能性があります。解決策として、STLヘッダーを含め、「using namespace std」を使用する必要がありますbefore gdiplus.hを含めます。
例:
#define NOMINMAX
// Include C++ headers
#include <algorithm>
using namespace std;
// Include Windows headers
#include <windows.h>
#include <gdiplus.h>
問題はおそらく#define NOMINMAX
お先にどうぞ #include "windows.h"
。 #define
最初に来ます。
その理由は、windows.h(実際、windows.hに含まれるwindef.hと思われる)に次のようなコードがあるためです。
#ifndef NOMINMAX
#define min(x,y) ((x) < (y) ? (x) : (y))
#define max(x,y) ((x) > (y) ? (x) : (y))
#endif
そう #define NOMINMAX
は、コンパイラー(または実際にはプリプロセッサー)にmin
およびmax
の定義をスキップするように指示していますが、#include "windows.h"
。