【发布时间】:2011-10-01 03:47:17
【问题描述】:
我有一个类用于存储我正在创建的视觉实验的一些静态默认变量。
它们没有被标记为 const,因为我在运行时使用 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和.cc文件的相关部分。
-
@Onedayitwillmake:您是否知道标记为
static的对象具有内部链接,因此您将在程序的每个翻译单元中获得一组不同的对象?如果您在一个翻译单元中调整它们,则不会影响其他翻译单元中副本的值。
标签: c++ static constructor