AAA.h
class SpecialChat;
class Logger
{
public:
// 원하는 내용을 클라이언트에 뿌린다.
static void Log(SpecialChat::CHAT_TYPE type, const char* format, ...);
};
------------------------------------------------------------------------
BBB.h
class SpecialChat
{
public:
enum class CHAT_TYPE : byte
{
GREEN = 0,
SYSTEM_MESSAGE = 0x3,
RED = 0x4,
GRAY = 0x5,
UNDEFINED = 0x12
};
}
-------------------------------------------------------------------------
main.cpp
#include "AAA.h"
#include "BBB.h"
int main()
{
return 0;
}
이렇게 선언해서 AAA.h 안에 포워드 선언 해서 Circular dependency 없애려고 했는데
에러가
오류 1 error C2027: 정의되지 않은 형식 'SpecialChat'을(를) 사용했습니다.
오류 2 error C2061: 구문 오류 : 식별자 'CHAT_TYPE'
이렇게 뜹니다.
즉, 포워드 선언을 인식을 못한다는거 같은데
어떻게 해야 될까요
enum 을 클래스안에 선언한게 잘못일까요
AAA.h 위에 그냥 #include "BBB.h" 하면 동작하긴 하는데 나중에 Circular dependency 생긴다고 알고 있습니당
애초에 저렇게 coupling을 발생시키는 설계는 객체지향적으로 잘 된 설계가 아님. 다시 설계해야 할듯... CHAT_TYPE을 SpecialChat 바깥으로 뺀 다음 독립적인 헤더로 분리시키던가...
혹은 SpecialChat의 추상 클래스 Chat을 설계한 다음 그 안에 CHAT_TYPE을 내장하고 SpecialChat은 Chat을 상속받아서 구현한 개념으로 설계하던가... Chat.h과 SpecialChat.h는 파일을 분리해야 겠지.