2013-06-22 212 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; 
    }; 
*/ 
}; 

感謝

+0

您錯過了編譯單元中'Stage :: systemFramework'的定義。 –

回答

4

上市的一類static類的數據成員只有聲明他們。他們仍然必須定義某處。把這個定義成一個.cpp文件:

Framework *Stage::systemFramework; 
+0

啊,沒有意識到我不得不再次定義它*。謝謝! –

2

那是因爲你需要一個FrameWork* Stage::systemFramework;地方太(在.cpp文件,通常情況下)。這可以「放置」你的變量,例如爲了緩存的原因,把它放在其他變量旁邊 - 這樣編譯器就不會把它扔到任何地方,所以類定義中的聲明就是這樣的聲明:「there將成爲這些變量中的一個「。 [或者在嵌入式系統中,可能有一部分內存由電池供電備份,而另一部分內存則不是,在這種情況下,「放置」該變量的位置又是這樣。

當然,類內部的public,privateprotected仍將決定哪些代碼部分可以訪問該變量。