1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | template <typename T> static T* CreateObj(const string& strTag, class CLayer* pLayer = NULL) { T* pObj = new T; if (!pObj->Init()) { SAFE_RELEASE(pObj); return NULL; } if (pLayer) { pLayer->AddObject(pObj); } pObj->AddRef(); return pObj; } | cs |
컴파일을 하게 되면 위의 코드의 13번째 줄에 2039 오류 ) 'AddObject': 'CLayer'의 멤버가 아닙니다 오류가 뜨게 된다.
pLayer는 CLayer로 선언되었기 때문에 CLayer의 멤버 함수인 AddObject를 사용할 수 있따고 생각했지만, 현재 위 코드는 CObj 클래스로,
Layer.h가 include되어 있지 않기 때문에 인식하지 못하는 것으로 보였다.
헤더 간의 include는 좋지 않고, static, template 때문에, 선언부와 구현부를 나누지 못하고 선언부에 함수 내용까지 모두 구현해야 한다.
< https://mufflemumble.tistory.com/13 ( 선언부와 구현부를 분리할 때 주의해야 할 것들 정리 ) 참고 >
어떻게 해야하나 싶은 도중, 아래와 같이 AddObject에 CLayer::를 붙여보았다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | template <typename T> static T* CreateObj(const string& strTag, class CLayer* pLayer = NULL) { T* pObj = new T; if (!pObj->Init()) { SAFE_RELEASE(pObj); return NULL; } if (pLayer) { // CLayer::를 해주지 않을 시 2039 오류 pLayer->CLayer::AddObject(pObj); } pObj->AddRef(); return pObj; } | cs |
컴파일도 되며, 실행했을 때 정상 작동하는 것까지 확인했다.
하지만 이는 임시방편식으로 된 것이고, 내가 완벽히 이해한 채로 사용한 코드가 아니므로 다른 문제가 발생할 수 있다.
문제점이 발생하거나, 혹은 이 방식이 맞다는 정보를 얻게 되면 글을 수정해야겠다.
'문제 해결' 카테고리의 다른 글
<문제점> 오류) C2760, C7519 // 구문 오류: '식별자'은(는) 예기치 않은 토큰입니다. 필요한 토큰은 ';' 입니다. (0) | 2019.02.28 |
---|