C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[23729] Ambiguity between... 에러의 해결책
박지훈.임프 [cbuilder] 1974 읽음    2003-01-17 20:44
에러 메시지 이름으로 검색을 해보셨으면 금방 해결하셨을텐데요..
흔한 에러이기 때문에 질문도, 답변도 엄청나게 많답니다.

"Ambiguity between A and B" 에러는 말 그대로 A와 B 사이에서 모호하다는 뜻입니다.
이런 에러가 발생할 수 있는 것은, C++Builder 자체 내에서 혹은 서드파티 컴포넌트를 설치했을 때
같은 이름의 타입이 여러번 선언될 수 있기 때문입니다.

이런 경우에 보면 두가지 타입이 이름은 똑같지만, 네임스페이스가 다른 경우가 보통입니다.
네임스페이스란 이름 공간이라고 번역하는데, 변수나 타입을 선언할 때 영역을 함께 지정한 것이지요.
모든 네임스페이스에 해당 타입이 하나뿐일 때는 문제가 되지 않지만, 서로 다른 네임스페이스에
같은 이름의 네임스페이스가 하나 이상 있어서 컴파일러가 어느것을 선택할 지 결정을 못했다는
에러입니다.

말씀하신 경우에 System::PLongint를 보면, 뒤의 PLongint 앞에 붙은 System이 네임스페이스입니다.
여기서 콜론 두개(::)는 네임스페이스 연산자구요. 앞의 단순히 PLongint라고만 된 것은 네임스페이스가
없다는 것이 아니라 전역(Global) 네임스페이스라고 합니다.
보통 이렇게 두개 이상의 네임스페이스에 같은 이름의 타입이 있는 경우, 두가지의 타입 선언이
실제로는 같은 내용일 수도 있지만 아닐 수도 있습니다.

결과적으로 해결책은...
BDE.hpp에서 참조하는 PLongint는 sysmac.h에 선언된 System 네임스페이스에 포함되어 있는 것입니다.
그러므로 BDE.hpp에서 에러가 난 PLongint 타입들을 몽조리 System::PLongint로 수정하면 됩니다.
기본 헤더파일인데 수정해도 괜찮을까 싶겠지만, 아~무 상관없습니다.

이전 버전에서는 괜찮았다고 하셨지요? C++Builder 6 버전에서도 기본적으로는 그 에러는 발생하지
않습니다. 이름 충돌이 일어난 다른 PLongint는 인클루드한 다른 헤더파일에서 선언된 것일 텐데,
아마도 기본 헤더파일들이 아닌 서드파티 컴포넌트의 헤더파일일 겁니다. 왜냐면 C++Builder 6에는
전역 네임스페이스로 선언된 PLongint가 없거든요.

그럼...


이성호 님이 쓰신 글 :
: C++Builder 5.0으로 작성한 프로그램을 6.0에서 컴파일 하니까
: 다음같은 에러가 발생합니다.
: 이유를 아시는 고수님들 한 수 지도 부탁합니다.
: 수고하세요.
:
: [C++ Error] BDE.hpp(4159): E2015 Ambiguity between 'PLongint' and 'System::PLongint'
: [C++ Error] BDE.hpp(4222): E2015 Ambiguity between 'PLongint' and 'System::PLongint'

+ -

관련 글 리스트
22207 C++Builder 5.0으로 작성한 프로그램을 6.0 변경시 에러가.... 이성호 827 2002/10/24
23729     Ambiguity between... 에러의 해결책 박지훈.임프 1974 2003/01/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.