[완료] 클래스안 구조체 참조선언
글쓴이: rasungboy / 작성시간: 목, 2008/07/17 - 12:21오후
안녕하세요.
보통 헤더가 꼬이는걸 방지하고자 헤더파일에는 사용하고자 하는 클래스/구조체의
참조선언만 해놓고 cpp 파일에 해당 클래스/구조체의 헤더파일을 include 해서 사용
하는데요.
예) a.h class B; class A { BOOL Create( B* p ); }; a.cpp include "B.h" BOOL A::Create( B* p ) { .... }
클래스안에 선언된 클래스나 구조체의 경우는 어떻게 해야할지 난감하네요.
예 b.h class B { struct ST { }; }; a.h class B; struct B::ST; class A { BOOL Create( B::ST* p ); };
당연히 class B 를 모르니 struct B::ST; 자체에서 B 를 모른다고
컴파일러는 에러를 내죠.
a.h 에 B::ST 가 선언되있는 b.h 를 인클루드 하지 않고
컴파일에 성공할 방법은 없을까요?
Forums:
안에 넣고는 안될껄요.
구조체를 안에다 넣었다는 것은 A클래스 안에서만 사용하겠다는 것인데요.
다른 클래스에서 사용하실려면, 구조체를 클래스 밖으로 꺼내셔야죠.
꼭 그래야만 하나요?
꼭 클래스안에 구조체를 선언했다고 해서
그 클래스 안에서만 사용 가능해야 하는건 아니라고 생각했는데요.
예를들어 관련된 기능들이 있는걸 하나의 클래스로 묶어서 그 클래스의
요소를 가져다 쓰는 개념으로 사용할려고 합니다.
제가 디자인 한것이 정녕 틀린 디자인인가요?
인클루드 하는것
인클루드 하는것 외에는 방법없습니다.
디자인이 잘못된건 아닙니다. 그보다 이런 단편적인 코드론 잘못된건지 아닌지 말하기도 뭐하죠.
이건 디자인에 대한 문제가 아닙니다. 컴파일러가 컴파일하는데 필요한게 갖춰줬느냐의 문제죠.
애시당초 B::ST라고 하고있는 순간에, 이미 B안에 있는 ST를 쓰겠다고 하는건데, 그럼 B안에 ST가 있다는걸 알고 있는거고, 그럼 B에 대한 선언이 포함되어야죠.
만약에 B가 클래스가 아니어도 상관없다면 namespace를 이용해보세요.
... 될텐데요...?
이렇게 하면 안되나요?
[A.h]
[B.h]
[B.cpp]
뭔가 질문을
뭔가 질문을 잘못이해하신거 같네요.
질문하신분과 A,B가 반대로 코드를 작성하셨는데, 아무튼 작성하신대로 따르자면, B.h에서 "A.h"를 인클루드 하지 않고 A::ST를 이용할수 있냐는게 질문입니다.
그런가요??
라고 해서.. 그저 클래스 내의 구조체 사용을 못하겠다 라고만 이해했어요.
인클루드 안하고는 못하니까. 인클루드를 해야한다는건 위의 어느분이 적으셨고..
저는 어떻게 해야 클래스 내의 구조제를 사용할 수 있는지만 코드로 적어놓은거고요..
그리고.. A,B가 반대로 된건 .. 댓글 쓰고 나서야 알아채서요.. -_-a
질문 마지막에
질문 마지막에 다음과 같이 적혀있습니다.
댓글 달기