0

我试图公开一个静态变量。我曾尝试将其作为公共静态和使用访问函数来执行,但是当我Stage::SetFramework( this );在我的框架类中使用该命令时,或者即使我systemFramework公开并使用Stage::systemFramework = this,我得到:

framework.obj||error LNK2001: unresolved external symbol "public: static class Framework * Stage::systemFramework" (?systemFramework@Stage@@2PAVFramework@@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;
    };
*/
};

谢谢

4

2 回答 2

4

列出static类中的类数据成员仅声明它们。它们仍然必须在某个地方定义。将此定义放入一个 .cpp 文件中:

Framework *Stage::systemFramework;
于 2013-06-22T12:22:02.770 回答
2

那是因为您也需要FrameWork* Stage::systemFramework;某个地方(通常在 .cpp 文件中)。这会将您的变量“放置”,例如出于缓存原因,您可能会将其放在一些其他变量旁边 - 因此编译器不会将它扔到任何地方,因此类定义中的声明就是这样,“那里将在某处成为这些变量之一”。[或者在嵌入式系统中,内存的某些部分可能由电池供电,而另一部分内存则没有,在这种情况下,您“放置”变量的位置很重要]。

当然,public类内部的privateprotected仍然会决定代码的哪些部分可以访问该变量。

于 2013-06-22T12:23:44.987 回答