클래스 전방선언으로 불필요한 헤더 in 헤더 를 줄이자
View 14,697 | 작성일2010.01.13 15:27
관련링크
본문
클래스 사용시에는 간혹가다 서로의 레퍼런스를 참조하는 경우가 있습니다.
---------AAA.h-------------------------
#include "BBB.h"
class AAA
{
BBB *bbbInst;
};
};
----------------------------------------
---------BBB.h-------------------------
#include "AAA.h"
class BBB
{
AAA *aaaInst;
};
};
----------------------------------------
위와같이 하면 서로의 헤더파일을 무한참조하기 때문에 #pragma once 나 #ifndef 랩핑 방법으로도 해결할 수가 없습니다.
이럴때는 전방선언을 해주면 문제가 해결됩니다.
---------AAA.h-------------------------
class BBB;
class AAA
{
BBB *bbbInst;
};
};
----------------------------------------
---------BBB.h-------------------------
class AAA;
class BBB
{
AAA *aaaInst;
};
};
----------------------------------------
주의할점은 전방선언을 한 클래스는 실제 클래스가 없는 빈 껍데기이기 때문에 레퍼런스 변수나 포인터 변수 선언시에만 유효합니다.
만약 이렇게 하면 에러가 나겠죠
---------AAA.h-------------------------
class BBB;
class AAA
{
BBB bbbInst;
};
};
----------------------------------------
헤더끼리의 의존성을 줄여야 하기 때문에 서로의 헤더를 참조해야 하는 클래스의 경우 저렇게 헤더 파일에서는 전방선언을 한 뒤에 실제 사용되는 CPP 파일에서 인클루드 해주시면 문제가 생기지도 않고 C++ 에서도 권장되는 방법입니다.