2011-07-30 4 views
31

비주얼 스튜디오에 오픈 프레임 웍스 007 프로젝트를 컴파일하는 동안 나는 다음과 같은 경고가 2010 SP1 :이 말할 수있는 건경고 C4003 : 매크로 '최대'의 실제 매개 변수가 부족 - 비주얼 스튜디오 2010 C++

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을 설정하려고하지만, 오픈 프레임 웍스는 ofConstants.h에 NOMINMAX을 정의하기 때문에 나는 NOMINMAX가 이미 정의되어 경고의 무리를 얻을 : 영향을받는 코드는 다음과 같습니다.

영향을받는 openFrameworks 파일에서 NOMINMAX를 정의하려고했지만 동일한 경고가 나타납니다. 사실 ofColor.h 및 ofPixel.h에 포함 된 파일을 분석하면 결과가 ofConstants.h를 포함하므로 결국 NOMINMAX가 있어야합니다. 한정된).

이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 네가하지 않으면 ... 무엇이 최선 일까? NOMINMAX가 이미 정의 된이 경고 또는 경고의 무리? 내가이 얘기 한 오류에 대해 이야기 할 때

은 BTW :

편집 warning C4003 and errors C2589 and C2059 on: x = std::numeric_limits<int>::max();

나는 깨끗한 C++ 프로젝트에 문제를 재현하려고하면 나는이 (경고 플러스 2 오류)를 얻는다. 그러나 openFrameworks 프로젝트에서 나는 경고 만받습니다. 그것이 내가 혼란스러워하는 이유입니다 !!

답변

36

#undef max을 관련 파일의 맨 위에 추가하십시오.

+4

먼저 #ifdef max를 잊지 마십시오. – Puppy

+2

@DeadMG 왜? 좋은 스타일일까요? IdeOne에서 시도해 보았지만 경고 나 오류가 발생하지 않았습니다. –

+0

문제는 해당 파일이 내 코드가 아님입니다. 그것은 openFrameworks의 코드이고 라이브러리가 업데이트되면 나중에 라이브러리 소스 코드를 변경하는 것이 PITA 일 수 있습니다. – petersaints

57

당신은이 고대 매크로에 처음으로 물리는 사람이 아닙니다. 그들은 그것들을 제거 할 수 없다. 그것은 오래된 코드를 깨뜨릴 것이다. 그래서 그들은 찌르는 것을 제거하기 위해 또 다른 매크로를 생각해 냈습니다. 다음과 같이 설정하십시오 :

#ifndef NOMINMAX 
# define NOMINMAX 
#endif 
#include <windows.h> 
// Rest of your #includes here 
//... 
+0

그리고 재정의에 대한 경고를 피하기 위해'#ifndef NOMINMAX #define NOMINMAX #endif #include ' – MSalters