(조사중)
코딩의 순서상 아직되지 않은 정의 되지 않은 타입을 가지고, 그의 멤버들을 쓸 수는 없다.
어떤 구조체나 클래스의 멤버를 쓰려면 그 구조체 등이 앞서 미리 정의가 되고,그것을 컴파일러가 오류없이 인식해야한다.
쓰이는 클래스가 먼저 정의 되어야한다.
그러나 서로 상대방 클래스를 쓰는 관계라면 어떻게 해결하는가?
한 가지 방법으로, 적어도 쓰임에 있어 일방적인 관계가 되도록 구조를 바꿔주는 것이 있다.
이렇게하면 대개는 forward declaration 이 필요없다.
그러나, forawrd declaration이 쓰이는 예는
-하나,
아직 정의되지 않은 클래스의 존재를 선언하여, 그 forward declaration(선언) 뒤에 나오는 클래스들에서 이 선언된 클래스 자체의 포인터 타입을 이용에 정의 및 선언하는 것을 허용한다. (forward declaration 된 클래스의 멤버를 사용할 수 있게 해주지는 못한다는 것을 명심)
-둘,
소스파일에서 필요한 클래스들을 참조하기 위해 #include 를 했지만,
헤더파일에서는 그들 클래스의 이름이 정의 및 선언을 위해 언급된 경우. 이경우는 헤더파일에서도 #include를 하는 대신 forward declaration을 써준다. (이경우 에는 헤더에서 include 하는 대신 소스에서는 해당 클래스의 정의를 include 안해도 동작할 것으로 보인다. 즉, 꼭 저렇게 할 필요는 없을 듯)
코딩의 순서상 아직되지 않은 정의 되지 않은 타입을 가지고, 그의 멤버들을 쓸 수는 없다.
어떤 구조체나 클래스의 멤버를 쓰려면 그 구조체 등이 앞서 미리 정의가 되고,그것을 컴파일러가 오류없이 인식해야한다.
쓰이는 클래스가 먼저 정의 되어야한다.
그러나 서로 상대방 클래스를 쓰는 관계라면 어떻게 해결하는가?
한 가지 방법으로, 적어도 쓰임에 있어 일방적인 관계가 되도록 구조를 바꿔주는 것이 있다.
이렇게하면 대개는 forward declaration 이 필요없다.
그러나, forawrd declaration이 쓰이는 예는
-하나,
아직 정의되지 않은 클래스의 존재를 선언하여, 그 forward declaration(선언) 뒤에 나오는 클래스들에서 이 선언된 클래스 자체의 포인터 타입을 이용에 정의 및 선언하는 것을 허용한다. (forward declaration 된 클래스의 멤버를 사용할 수 있게 해주지는 못한다는 것을 명심)
-둘,
소스파일에서 필요한 클래스들을 참조하기 위해 #include 를 했지만,
헤더파일에서는 그들 클래스의 이름이 정의 및 선언을 위해 언급된 경우. 이경우는 헤더파일에서도 #include를 하는 대신 forward declaration을 써준다. (이경우 에는 헤더에서 include 하는 대신 소스에서는 해당 클래스의 정의를 include 안해도 동작할 것으로 보인다. 즉, 꼭 저렇게 할 필요는 없을 듯)
'Application-level프로그래밍' 카테고리의 다른 글
(C++) Operator overloading 요약 (0) | 2009.09.13 |
---|---|
(C++) 클래스의 멤버변수를 레퍼런스 타입으로 갖으려면 (0) | 2009.09.13 |
(C++)디버깅을 위해 파일에 정보를 기록해주는 소스 (0) | 2009.07.27 |
(C) 전처리구문 (0) | 2009.07.27 |
(C)정적 2차원 배열 전달 (0) | 2009.07.22 |