【发布时间】:2013-06-25 20:18:52
【问题描述】:
struct 中有一个静态成员,因为在析构函数中需要它。
struct Form
{
// ...
~Form()
{
// access World here
}
static btDynamicsWorld *World;
};
有没有办法在另一个函数中初始化这个静态成员?
void ModulePhysics::Init()
{
// ...
btDynamicsWorld *Form::World = /* ... */;
}
我当前的代码导致这两个编译器错误。
错误 1 错误 C2655: 'Form::World' : 在当前范围内定义或重新声明非法
错误 2 错误 C2086: 'btDynamicsWorld *Form::World' : 重新定义
【问题讨论】:
-
你确定,静态成员是你想要的吗?该类的每个实例都是相同的!
-
@Sebastian
struct表示物理模拟中的刚体。World代表了许多物体之间物理相互作用的空间,只有一个实例存在。尸体必须在破坏时从世界中移除,否则模拟会崩溃。如果有更好的方法来处理这个问题,我很乐意听到。 -
您知道在结构中声明一个静态变量不会为它保留任何 RAM,您需要在其他地方再次声明它的 RAM 对吗?
-
@danijar: 如果这个“世界”没有直接连接到“表单”类,将它作为一个简单的全局变量(静态的,或在命名空间中,或单身人士)
-
似乎拥有一个包含大量 body 对象的 World 对象可能会更好。
标签: c++ static scope initialization member