C ++コードにmin()またはmax()呼び出しがあると、奇妙なエラーが表示されます。VisualC++コンパイラを使用しています。
2264 次
6 に答える
18
コードにwindows.hヘッダーファイルが含まれているかどうか、およびコードまたは他のサードパーティヘッダーに独自のmin() / max()定義があるかどうかを確認してください。はいの場合は、windows.hインクルードの前に次のようなNOMINMAXの定義を追加します。
#define NOMINMAX
#include <windows.h>
于 2008-08-18T04:15:34.510 に答える
2
別の可能性は、副作用による可能性があります。ほとんどの最小/最大マクロにはパラメーターが複数回含まれており、期待どおりに動作しない場合があります。エラーと警告も生成される可能性があります。
max(a,i++) は ((a) > (i++) ? (a) : (i++)) として展開されます。展開の () は、数式で呼び出す場合の問題を回避するためのものです。max(a,b+c) を拡張してみてくださいその後、i はプラス 1 またはプラス 2 のいずれかです
于 2008-08-23T11:17:25.570 に答える
2
Windows ではこれを関数スタイルのマクロとして定義しているため、次の回避策を利用できます。
int i = std::min<int>(3,5);
これが機能するのは、マクロmin()
が の後に が続く場合にのみ展開され、 の後にmin
が続く場合には展開されないためです。 (
<
于 2011-01-24T14:32:20.687 に答える
0
うーん...スコープ、おい:std::min()
、std::max()
。
于 2008-08-18T04:20:09.693 に答える
0
私は何年も使用していませんが、メモリブーストから最小値と最大値も割り当てられますか?
于 2008-08-18T04:49:15.377 に答える
-1
正直なところ、最小/最大に関しては、自分で定義するのが最善だと思います:
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))
于 2009-11-24T22:17:01.320 に答える