헤더 파일이 서로 참조 될 때
간혹가다가 헤더파일이 서로 참조 되야 하는 경우가 생긴다.
헤더파일이 여러번 참조되는 것을 방지 하기 위해 전처리기 명령
#ifnddf _XXX_H
#define _XXX_H
...
...
..
..
#endif
를 붙이지만 헤더파일을 서로 참조하는 경우 이런 방법이 통하지 않는다.
예를 들어 두 클래스 (AAA.h, AAA.cpp / BBB.h, BBB.cpp) 가 있다고 할때
////////////////////
// AAA.h
///////////////////
#include "BBB.h"
class AAA
{
public:
AAA();
~AAA();
void Get(BBB &b);
};
////////////////////
// BBB.h
///////////////////
#include "AAA.h"
class BBB
{
public:
BBB();
~BBB();
void Get(AAA &a);
};
와 같은 경우 헤더파일을 서로 참조하여 컴파일 오류가 난다.
이럴 경우 클래스 위에 다른 헤더파일의 클래스 타입만 명시 해 준 후,
.cpp 파일에서 헤더 파일을 인클루드 시켜 주면 된다.
////////////////////
// AAA.h
///////////////////
class BBB;
class AAA
{
public:
AAA();
~AAA();
void Get(BBB &b);
};
////////////////////
// BBB.h
///////////////////
class AAA;
class BBB
{
public:
BBB();
~BBB();
void Get(AAA &a);
};