2013-08-03 4 views
1

모호한 문제를 일으키는 VS2010에서 지정된 시스템 헤더 파일을 제외하는 방법이 궁금합니다.VS2010의 시스템 헤더 파일 제외

내 프로젝트에서는 오픈 소스 프로젝트를 사용합니다. cpp 파일이 호출되는 곳

std::something::max() 

여기서 max는 무언가의 방법입니다.

그러나, 최대도 내 경우에는 \ Windows와 키트에 자리 잡고 시스템 헤더 파일 "minwindef.h"에 정의되어 8.0 \ 공유 \ \ minwidef.h

#ifndef max 
#define max(a,b)   (((a) > (b)) ? (a) : (b)) 
#endif 

나는이 아니라고 생각 내 프로젝트에 필요합니다.

그래서이 파일을 수동으로 (반복적으로) 포함시키지 않으려면 어떻게해야합니까?

+0

당신은 항상 컴파일러 명령 행에'max'을 미리 정의을 시도 할 수 있습니다 (빨리 또는 늦게 돌아오고 당신이 당신의 전체 프로젝트에서 윈도우를 포함 유지하는 경우를 물린 것이다 다른 매크로의 전체 무리가있다). '/ Dmax = max'와 같은 것. 더 많은 해킹이 있지만 작동합니다. –

답변

3

Windows 헤더가 #include이되기 전에 #define NOMINMAX으로 만들 수 있습니다.

이것은 stl 버전과 충돌하는 minmax 정의를 제거하기 위해이 매크로를 추가 한 것과 같은 일반적인 문제입니다.

나는 이것에 대한 몇 가지 MSDN 참조를 시도 할 것입니다.

1

대부분의 경우, 당신의 opensource 프로젝트는 "windows"헤더와 "혼합"되도록 설계되지 않았습니다.

opensource 프로젝트가 포함 된 동일한 파일에 #include <windows.h>을 입력하지 마십시오. 반드시 포함해야하는 파일에는 반드시 <windows.h>의 포함을 제한해야하며 idealy는 자신의 헤더를 통해 나머지 코드에 제공되는 "windows 전용"기능을 가진 하나 이상의 파일을 가지고 있습니다. 기능 - Windows 이외의 다른 시스템으로 시스템을 이식하기로 결정한 경우에도 도움이됩니다.

+0

문제의 원인은 다음과 같을 수 있습니다. 그러나 @Alex는 실질적인 제안을했습니다. – SolessChong

+0

@SolessCHong : 예, 이름과 충돌하는 다른 매크로를 찾을 때까지 ... –