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
[6369] Re:Ambiguity between... 에러 해결책
박지훈.임프 [cbuilder] 2504 읽음    2001-03-27 20:06
병아리 님이 쓰신 글 :
: 안녕하세요..
: 컴파일하면 다음과같음메세지가발생하는군요..
: [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

그럼 이만...

+ -

관련 글 리스트
6350 [질문] 이에러메세지 해결방법을좀알려주세요!! 병아리 2242 2001/03/26
6369     Re:Ambiguity between... 에러 해결책 박지훈.임프 2504 2001/03/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.