C++ 클래서 전방 선언 오류.. 왜 나는지 모르겠습니다.
글쓴이: trymp / 작성시간: 목, 2016/03/24 - 11:00오전
class AA; class BB { public: BB(AA& rAA) :m_rAA(rAA) {} int show(void) { m_rAA.show(); } private: AA m_rAA; }; class AA { public; int show(void) { return cnt;} private: int cnt; }
위와 같은 헤더를 선언하면 class AA 에 대해서 전방선언 오류가 나면서 BB::show() 에서 컴파일 애러가 발생합니다.
show 함수 정의부를 따로 때어내서 정의하면 애러가 안나는데 선언부에다가 함수 정의를 하면 애러가 나네요..ㅠ
왜 그러는지 c++ 잘 아시는 분들 도움 좀 부탁드립니다.
Forums:
...
BB 안에서 "AA m_rAA;"와 같이 AA를 멤버 변수로 선언하려면 AA의 완전한 정의를 그 시점에서 알고 있어야 합니다. 전방선언만 가지고는 컴파일이 되지 않습니다.
"AA *m_rAA;"처럼 포인터로 쓴다면 가능합니다. 그 경우라도 물론 show를 부르는 건 불가능합니다. AA에 show가 있다는 걸 모르고 있으니까요. 굳이 그렇게 쓰려면 show는 선언만 하고 show의 정의는 AA의 완전한 정의가 나온 다음으로 빼야 합니다. 말하자면:
자세히 설명해 주셔서 감사합니다..^^
^^
제가 저번에 전방선언 답변드렸었는데
제가 저번에 전방선언 답변드렸었는데,
선방선언으로 해결하는 방법 말고도 저번 질문 기준으로 했을때
PIMPLE(Pointer to IMPLEmenation) 이라는 기법으로도 해결 가능합니다.
구현부(cpp)에서는 헤더파일(h, hpp)을 마음대로 include 해도 되니까요.. 한번 읽어 볼 만 할겁니다.
댓글 달기