2011-12-25 2 views
4

새 버전의 CBuilder (버전 XE2)를 테스트하고 있습니다. 대부분의 commnon includes는 부스트 라이브러리 나 dinkumware 라이브러리로 리디렉션됩니다 (일부 STL 구현?).C++ Builder : #include <iostream> 오류

#ifndef Error_H 
#define Error_H 

#include <exception> 
#include <iostream> //Error message, see bellow, please 

하지만 컴파일은 다음 (이상한) 메시지와 함께 중지됩니다 :

흥미로운는 사실, 그 컴파일 내 자신의 소스 코드 전에 중지했다됩니다
[BCC32 Error] xlocale(1392): E2451 Undefined symbol 'MB_LEN_MAX'[BCC32 Error] xlocale(1763):  
[BCC32 Error] xlocnum(1495): E2451 Undefined symbol 'CHAR_MAX' 
Full parser context 
xlocnum(1487): decision to instantiate: ostreambuf_iterator<char,char_traits<char> > numput::_Iput(ostreambuf_iterator<char,char_traits<char> >,ios_base &,char,char *,unsigned int) const 
--- Resetting parser context for instantiation... 
detectproj.cpp(22): #include c:\program files\embarcadero\rad studio\9.0\include\dinkumware\iostream 
iostream(5): #include c:\program files\embarcadero\rad studio\9.0\include\dinkumware\istream 
istream(5): #include c:\program files\embarcadero\rad studio\9.0\include\dinkumware\ostream 
ostream(5): #include c:\program files\embarcadero\rad studio\9.0\include\dinkumware\ios 
ios(5): #include c:\program files\embarcadero\rad studio\9.0\include\dinkumware\xlocnum 
xlocnum(30): namespace std 
xlocnum(1036): class num_put<_Elem,_OutIt> 
xlocnum(1487): parsing: ostreambuf_iterator<char,char_traits<char> > numput::_Iput(ostreambuf_iterator<char,char_traits<char> >,ios_base 

컴파일 ... 컴파일러 다음과 같은 순서로 포함 된 파일을 검색한다 :

iostream -> istream -> ostream -> ios-> xlocnnum 
iostream -> istream -> ostream -> ios-> xlocnnum -> streambuf -> xiosbase ->xlocale 

다음과 같은 오류 xlocnum 및 xlocale 파일의 처리를 중단 :

E2451 Undefined symbol 'CHAR_MAX' 
E2451 Undefined symbol 'MB_LEN_MAX' 

어디에서 문제가 될 수 있습니까? 나는 "include paths"에서 모든 항목을 제거했는데, 왜 IDE에 일반 라이브러리 대신 dinkumware 라이브러리가 여전히 포함되어 있습니까?

설정 :

Link with dynamic RTL: Off 
CodeGuard: On 
Directories and Conditionals/All configurations/Include Path: Empty 
Directories and Conditionals/All configurations/Library Path: Empty 
No pragma hdrstop, #pragma argsused are used in my code. 

이전 버전 (C++ 빌더 2010) 잘 작동합니다 ... 당신의 도움을

감사합니다.

+0

이미 문제가 있거나 해결 되었습니까? – kokbira

+0

처음부터 모든 것을 재구성 해 봤니? 업데이트 후 정의되지 않은 기호는 미리 컴파일 된 헤더 또는 다시 빌드되지 않은 바이너리를 나타낼 수 있습니다. – bipll

답변

0

#ifndef의 헤더 파일 끝에 #endif가 일치합니까?

이 오류를 생성하는 가장 작은 사용 완성 된 샘플 코드는 무엇입니까?

+0

나는 자신의 소스 코드에 의존하지 않는다. 그냥 컴파일러 찾아보기 헤더 파일을 다음과 같은 방향으로 포함 : iostream -> istream -> ostream -> ios -> xlocnum. 'MB_LEN_MAX'및 CHAR_MAX 상수가 정의되지 않은 것으로 인식되면 컴파일이 중지됩니다. – justik

0

나는이 게시물이 오래되었음을 알고 있지만 누군가 인터넷 검색에서 찾을 수 있습니다. 프로젝트 설정을 확인하십시오. 비슷한 오류가 발생하기 시작한 프로젝트가 있었고 컴파일러 설정 탭에서 코드 준수 설정을 Borland/Codegear에서 ANSI로 변경했음을 알았습니다. 다시 변경하면 오류가 제거됩니다.