7

C ++コードにmin()またはmax()呼び出しがあると、奇妙なエラーが表示されます。VisualC++コンパイラを使用しています。

4

6 に答える 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++)) として展開されます。

その後、i はプラス 1 またはプラス 2 のいずれかです

展開の () は、数式で呼び出す場合の問題を回避するためのものです。max(a,b+c) を拡張してみてください

于 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 に答える