cocos2d-x 클래스 전방시 주의 사항

 오랜만에 cocos2d-x 관련 포스팅이네요. C++에 컴파일 에러 내용이긴 하지만 cocos2d-x를 사용하면서도 나올 수 있는 에러이기에 태그에 cocos2d-x를 추가했습니다. 다른건 아니고 보통 일반적으로 자주들 사용하시는 클래스 전방 선언에 대한 내용입니다.

 저는 개인적으로 h 파일이 무거워지는 것을 싫어하기 때문에 h에 include를 최소화하고 클래스 전방 선언을 자주 사용합니다. 이번에 cocos2d-x로 작업하다가 발생했던 에러인데요, 사실 이건 작년에 한참 회사에서 cocos2d-x 기반 프레임워크 만들 때 발생했었는데 정리 안하고 넘어갔다가 이번에 개인 프로젝트하면서 또 나와서 확실히 정리하고 넘어가게되네요. 물론 cocos2d.h 하나만 include 해주면 이런 에러 걱정은 없긴하겠죠.

error C2872: 'CCTransitionScene' : 모호한 기호입니다.
CCTransitionScene'일 수 있습니다.
cocos2d::CCTransitionScene'일 수 있습니다.
error C2872: 'CCScene' : 모호한 기호입니다.
CCScene'일 수 있습니다.
cocos2d::CCScene'일 수 있습니다.

 위와 같이 특정 클래스가 모호한 기호라고 하면서 에러가 발생할 수 있습니다. 자 일단 제가 작업중이었던 소스를 보겠습니다.


#pragma once

#include "layers_scenes_transitions_nodes\CCLayer.h"

class CCScene;
class CCTransitionScene;

///< 당연히 아래 주석을 풀고 위에 클래스 전방 선언을 주석하면 잘 된다.
//#include "layers_scenes_transitions_nodes\CCTransition.h"

USING_NS_CC;

class MyLayer : public CCLayer
{
public:
MyLayer();
~MyLayer();

bool init() override;

bool ccTouchBegan(CCTouch* touch, CCEvent* event);
void ccTouchEnded(CCTouch* touch, CCEvent* event);

CCTransitionScene* createTransition(int nIndex, float t, CCScene* s);

CREATE_FUNC(MyLayer);
};


 별것 없는 코드입니다. CCTransitionScene* 와 CCScene* 때문에 클래스 전방 선언을 해줬지만 에러가 발생했죠. 주석대로 CCTransition을 include해주면 해결되는 일이긴하죠. 뭐가 문제일까요? class 선언전에 USING_NS_CC; 까지 했기때문에 얼핏보면 제대로 된 것 같은데 말이죠.

 문제는 그냥 바로 클래스 전방 선언을 했다는데 있는데요, CCScene와 CCTransitionScene는 모두 namespace cocos2d 에 속해있습니다. 그래서 밑에서는 미리 사용한다고 USING_NS_CC; 를 해줬던 거구요. 즉, 클래스 전방 선언 할 때도 이놈들을 namespace로 묶어줘서 해줘야 한다는 거죠.


NS_CC_BEGIN
class CCScene;
class CCTransitionScene;
NS_CC_END;

 이렇게 말이죠. 그러면 비주얼 스튜디오 상에서는 클래스 색상이 제대로 먹히면서 컴파일 에러가 없을겁니다.


 여기서 또 조심해야 할 것이


#pragma once

NS_CC_BEGIN
class CCScene;
class CCTransitionScene;
NS_CC_END;

#include "layers_scenes_transitions_nodes\CCLayer.h"

USING_NS_CC;

class MyLayer : public CCLayer
{
...
};


 이렇게 NS_CC_BEGIN과 클래스 전방 선언을 너무 빨리해도 문제가 발생합니다. 최소한 한번은 namespace cocos2d( NS_CC_BEGIN )가 사용된 h를 include하고 난 다음에 해줘야 인식을 하게 되는거죠.

댓글

이 블로그의 인기 게시물

'xxx.exe' 프로그램을 시작할 수 없습니다. 지정된 파일을 찾을 수 없습니다.

goorm IDE에서 node.js 프로젝트로 Hello World Simple Server 만들어 띄워보기

애드센스 수익을 웨스턴 유니온으로 수표대신 현금으로 지급 받아보자.