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プロジェクトでは警告が表示されるだけです。だから混乱する!!
追加 #undef max
関連ファイルの先頭に。
あなたはこれらの古代のマクロに噛まれた最初ではありません。彼らはそれらを削除することができません、それは古いコードを壊すでしょう。そこで、彼らはおとりを取り除くために別のマクロを思いついた。次のようにします。
#ifndef NOMINMAX
# define NOMINMAX
#endif
#include <windows.h>
// Rest of your #includes here
//...