【问题标题】:Using a static member variable使用静态成员变量
【发布时间】:2014-03-25 23:26:29
【问题描述】:

您好,在我的class Bullet 中,当bullet 不活动时,我声明活动为假,当它活动时,我声明为真。在我的另一个class 中,我想使用bool 成员active 并更改它,我该怎么做?

我收到了错误

Error 18 error LNK2001: unresolved external symbol "public: static bool Bullet::active" (?active@Bullet@@2_NA) C:\Skolarbete\Programmering i C++\ProjectTemplate\ProjectTemplate\Alienrow.obj ProjectTemplate

声明:static bool active;

当我使用它时:Bullet::active = false;

我也很新 C++ 所以不要讨厌!感谢我能得到的所有帮助:D

【问题讨论】:

  • 你在使用一些库吗?
  • 我在我想要使用的文件中包含了 bullet.h 文件,如果这就是你的意思吗?

标签: c++ class members


【解决方案1】:

类中的静态变量实际上是一个外部声明。您仍然需要变量定义。这类似于 C 外部变量。

所以在.h文件中:

class Bullet
{
public:
    static bool active;
};

在 .cpp 文件中,在全局范围内:

bool Bullet::active = false;

推断缺少变量定义(不是声明)是因为您的错误消息实际上来自链接器,而不是编译器。

【讨论】:

    【解决方案2】:

    静态类成员需要在某个地方定义,在你的情况下必须有一个

    bool Bullet::active;
    

    在您选择的 cpp 文件中定义(#includes 类声明的文件)。
    您可以将静态成员视为恰好位于类的“命名空间”中的全局​​变量。这样的类声明不会创建任何对象,甚至不会创建静态成员,它只是一个声明。

    【讨论】:

      【解决方案3】:

      您忘记指定变量的类型(即定义对象)。写

      bool Bullet::active = false;
      

      而不是

      Bullet::active = false;
      

      首先您必须定义对象,然后才能分配它。

      至于你的陈述

      Bullet::active = false;
      

      那么它不是活跃的定义。这是一个赋值语句。

      考虑到定义应该放在某个模块中。如果你将它放在标题中,你会得到一个对象已经定义的错误。

      【讨论】:

      • 然后它说 'bool Bullet::active' : redefinition' "
      • @Prolle 您必须从 hader 中排除此定义并将其放在某个模块中。
      猜你喜欢
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多