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
[957] [답변] ZPIKN205/ 형 선언에 대하여/프포
박지훈.임프 [cbuilder] 3810 읽음    1999-01-17 09:32
안녕하세요. 천리안 프로그래머포럼 C++Builder 담당자 임펠리테리입니다.

C++ 프로그래머가 의외로 C++의 기초개념이 좀 모자란 경우를 많이 보게 됩니다.

물론 저도 마찬가지입니다. C의 단순함에 비해 C++은 정말 기본적인 개념부터가

온통 복잡함 투성이죠. 항상 에러메시지를 스승으로 삼아 고개를 숙이고 배웁니다.

:: 은 현행 ansi C++에서 scope resolution operater라고 되어있습니다. 대충

번역하자면 범위 지정 연산자라고나 할까.. 이건 다시 namespace 개념에서 보면

namespace resolution operater 쯤 됩니다.

이 namespace라는 개념이 중요합니다.

C++에서 모든 클래스는 namespace입니다. 그리고 클래스가 아니면서도 명시적으로

클래스 비슷하게 namespace라고 선언된 것도 볼 수 있습니다.

이 namespace란 개념은, 식별자들간의 이름 충돌(name collision이라고 하던가..?)

을 막기 위한 방법입니다. 서로 다른 namespace 안에서 같은 식별자 이름을 사용하

기 위한 방법이죠.

추측하신 것이 대략 맞는데요.. Bitmap이라고만 하면, vcl에는 TBitmap 형이

두가지가 있기 때문에 ambiguity 컴파일에러가 뜹니다. (모호하단 뜻이죠.)

그런데 왜 TBitmap이 두가지냐 하면.. 우리가 일반적으로 쓰는 vcl TBitmap은

graphics.pas에서 나오는 graphics.hpp에 선언되어 있습니다.

그런데, 이것 말고 Windows.pas에서 생성된 Windows.hpp에도 TBitmap이 있는데..

이것은 win32 api의 표준 tagBITMAP형 포인터입니다.

그리고 각각의 모듈을 보면 각각 namespace Graphics 와 namespace Windows 로

선언된 내부에 각각의 TBitmap이 선언되어 있죠. 만약에 vcl 수준에서 이렇게

namespace를 구분해놓지 않았다면 이 두개의 모듈은 헤더를 동시에 인클루드한

것만으로도 이름충돌로 컴파일 에러를 내겠죠?

이러한 이유로, 어느 namespace에 속하는 식별자인지를 명시해주기 위해

(namespace이름)::(식별자이름) 이렇게 써주는 것입니다.

이 TBitmap의 경우에서는 표준 vcl 내부에서 두 식별자의 이름이 같은 경우고..

다른 경우로서, TextAlign을 지정하는 TAlignment 에서는, 보통때는 이러한 문제가

없지만.. rx의 특정 컨트롤을 사용하면 거기서 선언된 동일한 이름의 TAlinment

때문에 ambiguity 에러를 발생합니다.

(정확하게 rx의 어떤 컴퍼넌트였는지는 정확히 기억이 안나는군요.)

물론 이경우에도 소속 namespace를 명시해줌으로써 문제를 해결할 수 있습니다.

그럼 참고하시길...




독립문에서 임펠리테리였습니다.

(cbuilder, cbuilder@thrunet.com)



+ -

관련 글 리스트
956 [질문] 형 선언에 대하여/프포 zpikn205 3700 1999/01/17
957     [답변] ZPIKN205/ 형 선언에 대하여/프포 박지훈.임프 3810 1999/01/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.