2013-06-22 160 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仍将决定哪些代码部分可以访问该变量。