Windows.h マクロと Std マクロ間の衝突を解決する
cin から有効な整数入力を取得しようとすると、衝突が発生するのが一般的です。 Windows.h で定義されている max マクロと標準ライブラリのマクロの間。この問題は、max 引数を指定して std::cin.ignore() 関数を使用するときに発生します。この関数は、Windows.h で std とは異なる数のパラメータを受け取ります。
解決策: Windows.h を抑制するマクロ
衝突を回避するには、NOMINMAX マクロを定義します。このマクロは、Windef.h からの min および max 定義の組み込みを防ぎ、標準ライブラリのマクロのあいまいさを解決します。
実装:
#pragma once #define NOMINMAX #include <Windows.h> // No min() or max() definitions included #include <iostream> using std::cin; using std::cout; void Foo() { int delay = 0; do { if(cin.fail()) { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); } cout << "Enter number of seconds between submissions: "; } while(!(cin >> delay) || delay == 0); }
定義によりNOMINMAX を使用すると、標準ライブラリの max マクロを再定義したり、その定義を個別に保存したりせずに使用できます。これによりコードが簡素化され、エラーが発生しやすい回避策が不要になります。
以上がWindows.h と標準ライブラリ間の「最大」マクロ衝突を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。