web-dev-qa-db-ja.com

警告C4003:マクロ 'max'の実際のパラメーターが不十分です-Visual Studio 2010 C ++

Visual Studio 2010 SP1でopenFrameworks 007プロジェクトをコンパイルすると、次の警告が表示されます。

d:\pedro\development\videoflow\openframeworks\libs\openframeworks\types\ofcolor.h(127): warning C4003: not enough actual parameters for macro 'max'
d:\pedro\development\videoflow\openframeworks\libs\openframeworks\types\ofcolor.h(128): warning C4003: not enough actual parameters for macro 'max'
d:\pedro\development\videoflow\openframeworks\libs\openframeworks\graphics\ofpixels.h(150): warning C4003: not enough actual parameters for macro 'max'
d:\pedro\development\videoflow\openframeworks\libs\openframeworks\graphics\ofpixels.h(151): warning C4003: not enough actual parameters for macro 'max'

通常、この警告の後にエラーが続きますが、私の場合は問題なく動作します。影響を受けるコードは次のとおりです。

const float srcMax = ( (sizeof(SrcType) == sizeof(float) ) ? 1.f : numeric_limits<SrcType>::max() );
const float dstMax = ( (sizeof(PixelType) == sizeof(float) ) ? 1.f : numeric_limits<PixelType>::max() );

プリプロセッサでNOMINMAXを設定しようとしましたが、openFrameworksはofConstants.hでNOMINMAXも定義しているため、NOMINMAXがすでに定義されているという警告がたくさん表示されます。

影響を受けるopenFrameworksファイルでNOMINMAXを定義しようとしましたが、同じ警告が表示されます(実際にofColor.hとofPixel.hに含まれているファイルを分析すると、ofConstants.hが含まれるため、NOMINMAXを定義する必要があります)。

これを解決する方法について何か考えはありますか?そうしないと...何が一番いいの?この警告、またはNOMINMAXがすでに定義されているという警告の束?

編集:

ところで、私がエラーについて話しているとき、私はこれらについて話していました: C4003およびエラーC2589およびC2059の警告:x = std :: numeric_limits <int> :: max();

クリーンなC++プロジェクトで問題を再現しようとすると、これ(警告と2つのエラー)が表示されます。しかし、openFrameworksプロジェクトでは警告が表示されるだけです。だから混乱する!!

39
petersaints

追加 #undef max関連ファイルの先頭に。

43
Seth Carnegie

あなたはこれらの古代のマクロに噛まれた最初ではありません。彼らはそれらを削除することができません、それは古いコードを壊すでしょう。そこで、彼らはおとりを取り除くために別のマクロを思いついた。次のようにします。

#ifndef NOMINMAX
# define NOMINMAX
#endif
#include <windows.h>
// Rest of your #includes here
//...
70
Hans Passant