저는 게임 프레임 워크를 작성하고 있습니다. 렌더러와 같은 플랫폼 종속 코드를 일반화하고 캡슐화하여 좀 더 쉽게 포팅 할 수 있도록 노력하고 있습니다. 여전히 프레임 워크를 사용하는 깨끗한 방법을 가지고있는 동안이 작업을 수행하려고합니다. 나는 현재 정적 변수와 네임 스페이스에 문제가 ... 내 main()
에 따라서네임 스페이스의 정적 변수
// Renderer.h namespace Renderer { static IRenderer* g_pRenderer = NULL; static IRenderer* Get(void) { return g_pRenderer; } static IRenderer* CreateD3DRenderer() { g_pRenderer = new RendererD3D(); // Derived from IRenderer return g_pRenderer; } }
가 있어요, 나는 CreateD3DRenderer()
를 호출 할 수 있습니다 그것은 잘 인스턴스를 반환; g_pRenderer
은 함수의 범위 내에서 생성되고 반환되기 때문에 그 값을 보유합니다 ... 그러나 Renderer::Get()
은 NULL
을 반환합니다. g_pRenderer
의 초기화에서 'static'
을 제거하면 다른 파일에서 충돌이 발생합니다.
무슨 일 이니?
동일한 이름을 사용하는 다른 변수가 없습니다. 엄밀히 말하면,이 코드가 들어있는 헤더를 포함하면 다시 선언됩니다. 하지만 그렇지 않으면이 이름이 프로그램의 유일한 변수입니다. – Sutanreyu