gpt4 book ai didi

c++ - 用作常量的静态变量在其他类中返回零

转载 作者:行者123 更新时间:2023-11-30 00:39:58 24 4
gpt4 key购买 nike

我有一个类,用于为我正在创建的视觉实验存储一些静态默认变量。

它们没有标记为常量,因为我使用 GUI 在运行时调整它们。当我将它们记录在主类中时(调用 Defaults 类上的静态函数 init)——它们是有效的。但是在不同类的构造函数中它返回零。

输出看起来像这样

"Constants::init() called" // Constants::Heads::MIN_LIFETIME initialized to 1200
preSetup-Log Constants::Heads::MIN_LIFETIME 1200
PhysicsObject- Constants::Heads::MIN_LIFETIME 0 // Y you zero?
postSetup-Log Constants::Heads::MIN_LIFETIME 1200

我这样定义常量:

namespace Constants {
namespace Forces {
static int MAX_LIFETIME;
static float GRAVITY_FORCE;
};
}


static void init() {
std::cout << "Constants::init()" << std::endl;
Constants::Forces::GRAVITY_FORCE = 40000.0f;
Constants::Forces::MAX_LIFETIME = 3000;
}

最佳答案

这是因为当您在(比如 .h)文件中声明变量 static 并将该文件包含在各种 .cpp 文件中时然后对于每个.cpp 文件(翻译单元),创建一个单独的变量拷贝。例如,

// x.h ...
namespace Forces {
static int MAX_LIFETIME; // unique copy for each translation unit (.cpp)
static float GRAVITY_FORCE; // same as above

extern int SOMETHING; //<----- creates only single copy
};

如图所示,您应该在 namespace 中将变量创建为 extern 并仅在其中一个 中定义该变量。 cpp 文件。

其他方法 是将它们封装在一个class 而不是namespace 中:

class Forces {
static int MAX_LIFETIME; // only 1 copy
static float GRAVITY_FORCE; // only 1 copy
};

您仍然需要在其中一个 .cpp 文件中将它们定义为,

int Forces::MAX_LIFETIME = <>;

关于c++ - 用作常量的静态变量在其他类中返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7618068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com