본문 바로가기

Programming/MFC

error C2589 에 대한 고찰과 문제 해결방법

출처 : http://tommyhsm.tistory.com/100


MFC에서 PCL을 사용하려고 작업하는 중에,

 

다음과 같은 에러가 떴다.

 

...

Warning C4003: 'max' 매크로의 실제 매개 변수가 부족합니다.

error C2589: '(' : '::' 오른쪽에 잘못된 토큰이 있습니다.

error C2988: 템플릿 선언/정의를 인식할 수 없습니다.

error C2059: 구문 오류 : '::'

...

 

도대체 뭐가 문제일까.. 하면서 고민 하던 중,

 

공통점은 max 매크로의 실제 매개 변수가 부족하다 라는 공통된 경고를 깨닫게 되었고,

 

error C2589로 검색을 하던중, 한 블로그에 들어가서 문제점과 해결방법을 알게 되었다.

 

참조 블로그 링크 : http://blog.naver.com/smurfe380/150002451786

 

 

 

 

 

문제점은 바로..

 

std::min() 과 windef.h 파일에 있는 #define min(a,b) (((a) < (b)) ? (a) : (b)) 끼리 서로 충돌하는 에러 였던 것이었다.

 

 

 

 

 

그래서 해결 방법은,

 

문제가 되는 소스코드의 제일 첫 부분(include 하기 전), 아래의 소스코드를 추가해주면 문제는 깔끔히 해결 된다.

 

---------------------------------------------------------------------------------------------------

 

 

#ifdef max

 

#undef max

#undef min

#endif // max

 

---------------------------------------------------------------------------------------------------

 

이렇게 함으로써, max가 충돌되는것을 막음과 동시에, 적절한 min() 함수가 호출되서, 오류들을 말끔히 해결 할 수 있었다.