2013-06-22 2 views
0

정적 변수를 노출하려고합니다. 나는 두 단지 공공 정적으로이 일을하고, 액세스 기능을 사용하여 시도했다,하지만 난 내 프레임 워크 클래스의 명령 Stage::SetFramework(this);을 사용할 때, 또는 내가 공공 systemFramework을하더라도 및 Stage::systemFramework = this를 사용, 내가 얻을 :공용 정적 변수 액세스

framework.obj||error LNK2001: unresolved external symbol "public: static class Framework * Stage::systemFramework" ([email protected]@@[email protected]@A)|

이것이 작동하지 않는 이유가 확실하지 않습니다. 분명히 뭔가 빠졌어. 아무도 도와 줄 수있어?

#pragma once 

#include "event.h" 

#ifndef Framework 
class Framework; 
#endif // Framework 

class Stage 
{ 
    protected: 
    static Framework* systemFramework; 

    public: 
    // static Framework* systemFramework; 

    // Stage control 
    virtual void Begin() = 0; 
    virtual void Pause() = 0; 
    virtual void Resume() = 0; 
    virtual void Finish() = 0; 

    virtual void Event(FwEvent *e) = 0; 

    virtual void Update() = 0; 
    virtual void Render() = 0; 

    static void SetFramework(Framework* FrameworkObject) 
    { 
     systemFramework = FrameworkObject; 
    }; 
/* 
    static Framework* GetFramework() 
    { 
     return systemFramework; 
    }; 
*/ 
}; 

감사 static 클래스 데이터 멤버 클래스에서

+0

컴파일 유닛에서'Stage :: systemFramework'에 대한 정의가 없습니다. –

답변

4

목록은 그들 선언한다. 그들은 여전히 ​​ 어딘가에 정의되어야합니다. 하나 개의 .cpp 파일에이 정의를 넣어 : 당신이 너무 어딘가에 FrameWork* Stage::systemFramework;을 필요로하기 때문이다

Framework *Stage::systemFramework; 
+0

아, 다시 정의해야한다는 것을 몰랐습니다. 감사! –

2

(A .cpp 파일에 일반적으로 참조). 예를 들어 캐싱을 위해 변수를 "배치"하면 일부 변수 옆에 변수가 있으므로 컴파일러는 아무 곳이나 던지지 않으므로 클래스 정의의 선언은 "거기에있는 선언 어딘가에서 이러한 변수 중 하나가 될 것입니다. " [또는 임베디드 시스템에서는 배터리 전원으로 백업되는 일부 메모리와이 경우 변수를 "배치"하는 메모리의 다른 부분이있을 수 있습니다.]

물론 클래스 내부의 public, private 또는 protected은 여전히 ​​코드의 어느 부분에서 변수에 액세스 할 수 있는지를 결정합니다.

관련 문제