c++에서 서로 다른 헤더가 잇는데..

aNsITAte의 이미지

a.h
#ifndef _A_
#define _A_
#include "b.h"
#include "c.h"
#include <...>
..
#endif

b.h
#ifndef _B_
#define _B_
#include "a.h"
#inlcude "c.h"
#include <...>
..
#endif

c.h
#ifndef _C_
#define _C_
#include <...>
..
#endif

d.h
#ifndef _D_
#define _D_
#include "a.h"
#inlcude "b.h"
#inlcude "c.h"
#include <...>
..
#endif

이렇게 헤더파일이 있을때 a, b에서 컴파일러가 a에서는 b에 있는 클래스를 b에서는 a에 있는 클래스를 찾지못한다고 에러를 내는데 -_-;;

이게 정상적인 건가요?

웃기게도 a, b두개의 헤더중에서 하나의 헤더에서 다른 것을 제외한 상태에서는 정상적인 컴파일이 됩니다.
그냥 같은 소스인데도 그 헤더를 추가만 하면 무조건 에러를 내는군요;

어떻게 해결은 안될까요?

kane의 이미지

a.h

// #include "b.h"
class B;

class A
{
    ...
}

b.h
// #include "a.h"
class A;

class B
{
    ...
}

이렇게 해보세요.
doldori의 이미지

// a.h
#include "b.h"
class A { B b; };

// b.h
#include "a.h"
class B { A a; };

이런 형태의 상호 참조는 불가능합니다. 전처리 후의 코드를 살펴보면 그 이유를
알 수 있을 겁니다. 적어도 한쪽은 kane님의 방법대로 전방 선언과 함께 포인터나
참조형을 써야 합니다.