본문 바로가기

Programming/C/C++/CS

헤더 파일이 서로 참조 될 때

간혹가다가 헤더파일이 서로 참조 되야 하는 경우가 생긴다.

헤더파일이 여러번 참조되는 것을 방지 하기 위해 전처리기 명령

#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);

};