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

C++빌더 FAQ
C++Builder Programming FAQ
[37] Ambiguity between... 에러 해결책
박지훈.임프 [cbuilder] 19408 읽음    2001-09-17 13:00
질문 - 병아리님

안녕하세요..
컴파일하면 다음과같음메세지가발생하는군요..
[C++ Error] MediaPlayer_TLB.h(412): E2015 Ambiguity between 'TGUID' and 'System::TGUID'
[C++ Error] MediaPlayer_TLB.h(413): E2015 Ambiguity between 'TGUID' and 'System::TGUID'
근데 컴파일옵션을변경하면 또 컴파일되요..
그리고 메이커프로젝트하면.. 또 에러발생 그런데 또 컴파일옵션에서 또원래데로변경하면
또 정상적으로 컴파일이되구여..
계속 그런데여... 왜자꾸 그런현상이발생하는지 알고싶군요

그럼좋은 날되세요


답변 - 박지훈.임프님

임펠리테리입니다.

Ambiguity between... 에러는 같은 이름의 두개 이상의 타입이 존재할 경우 발생합니다. 주로, 인클루드한 헤더 파일들 사이에서 같은 이름의 타입이 존재하면 발생하죠. 실제로, TGUID는 ole2.hpp와 sysmac.h 두군데에 선언되어 있습니다. 만약 이 두개의 헤더파일이 동시에 인클루드되면 그런 에러가 발생하게 되는거죠. 아마도 ole2.hpp는 액티브엑스를 임포트하는 과정에서 미디어플레이어 컨트롤에 추가되었을 거고, sysmac.h 은 system.hpp 등 자주 인클루드되는 헤더에서 간접적으로 인클루드되었을 겁니다.

C++에서는 이런 문제를 해결하기 위해 네임스페이스(namespace)라는 개념이 있습니다. 앞에서 본 두개의 헤더는 각각 ole2와 system이라는 네임스페이스가 지정되어 있습니다. 그러므로, 에러가 발생한 TGUID를 사용한 소스 부분에서, 이 둘중에 어느것인지 지정만 해주면 됩니다. 보통은 ole2의 네임스페이스를 지정하면 될 겁니다. ole2::TGUID 이렇게요.

다음의 답변에서도 네임스페이스에 대한 설명이 있으니 참고하시기 바랍니다.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=4881

그럼 이만...

+ -

관련 글 리스트
37 Ambiguity between... 에러 해결책 박지훈.임프 19408 2001/09/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.