|
C++Builder 5와 6의 기본 STL이 달라서 그렇습니다.
C++Builder 5에서 사용하던 min/max 함수는 stdlib.h 헤더파일에 정의되어 있는데, 이것이 원래는
Rogue Wave STL에 포함된 것을 stdlib.h에 갖다놓은 것입니다. 따라서 기본 STL이 Rogue Wave가 아닐
경우에는 이 min/max 함수를 동작하지 않는 것이 원칙이겠지요.
따라서 C++Builder 6에서 기본 STL이 Rogue Wave STL에서 STLPort로 바뀌면서, 기본 STL을 Rogue Wave로
설정하지 않은 경우에는 min/max 함수가 정의되지 않도록 프리프로세서로 지정되어 있습니다.
이런 이유로, C++Builder 5에서 사용하던 동일한 min/max 함수를 그대로 사용하고 싶다면, 기본 STL을
Rogue Wave로 선택하면 됩니다. 이렇게 하려면, 프로젝트 옵션의 Directories/Conditionals에 가서
아래 Conditionals 입력창에 _USE_OLD_RW_STL 라고 입력해주면 됩니다.
물론 min/max 함수 자체는 단순하기 짝이 없기 때문에, 위와 같은 처리가 마음에 안든다면 RW STL이 아닌
다른 라이브러리의 min/max 함수를 호출하거나 혹은 스스로 만드셔도 상관이 없습니다.
참고로 RW STL에서 min 함수는 다음과 같이 선언되어 있지요. 물론 이 부분을 그대로 소스에 복사해서
써도 상관없습니다.
template <class T>
inline const T& min (const T& a, const T& b)
{
return b < a ? b : a;
}
그럼...
gary 님이 쓰신 글 :
: 빌더5에서 만든 컴포넌트가 빌더6에서 컴파일시 min 함수 부분에서 에러가 나는데요.
: 컴포넌트 컴파일할때 버젼이 다르면 뭔가 조치가 필요할까요?
|