본문 바로가기

Enginius/C / C++

C++에서 클래스 상호 참조 문제 해결


 C++에서 코딩을 할 때 객체가 서로 참조를 해야 할 때가 있다. 
 A.c A.h가 있고 B.c B.h가 있을 때 양 헤더에 include를 시켜주면 클래스가 redefine되었다는 에러가 나온다. 이를 해결해기 위해선 다음과 같이 해야 한다. 

 C++에서는 predeclaration의 개념을 제공한다. 

  • A.H
    #include "B.H"
    class A
    {
        B* m_pb;
        A(B* pb);
    };
  • B.H
    class A; // 이렇게 선언만 합니다.
    class B
    {
      A* m_pa;
      B(A* pa);
    };
     
  • A.CPP
    #include "A.H"
    A::A(B* pb)
    {
      m_pb = pb;
    }
     
  • B.CPP
    #include "B.H"
    #include "A.H"  // 여기서 참조하는 것은 상호 참조가 아닙니다.
    B::B(A* pa)
    {
      m_pa = pa;
    }


'Enginius > C / C++' 카테고리의 다른 글

MFC - 에디트박스를 써보자  (0) 2009.11.23
MFC - 창을 하나 더 띄워볼까? 모달리스  (0) 2009.11.23
MFC - Slider Control을 써보자  (1) 2009.11.06
MFC - 포커스를 옮겨보자  (0) 2009.11.05
MFC - 그림을 그려보자.  (5) 2009.11.04