C++ 在ue4 c+中初始化静态变量+;

C++ 在ue4 c+中初始化静态变量+;,c++,static,unreal-engine4,static-variables,C++,Static,Unreal Engine4,Static Variables,我有一个演员班ANodeBase。每个节点必须具有唯一的id。为了实现这一点,我创建了静态变量id\u counter 代码: 问题是,id\u计数器并没有初始化,更准确地说,它是由13初始化的,即使我重新启动ue4,即使我添加一些代码并重新编译项目。当我创建其他演员时,他们将增加1 如果重要,直接在引擎中创建的对象是BP\u NodePC:NodeBase:Actor 有人能解释一下为什么会发生这种情况,或者提出一个替代的计算方法吗 编辑:由于未知原因,在启动前创建12个对象。不知道如何修复它

我有一个演员班
ANodeBase
。每个节点必须具有唯一的
id
。为了实现这一点,我创建了静态变量
id\u counter

代码:

问题是,
id\u计数器
并没有初始化,更准确地说,它是由13初始化的,即使我重新启动ue4,即使我添加一些代码并重新编译项目。当我创建其他演员时,他们将增加1

如果重要,直接在引擎中创建的对象是
BP\u NodePC:NodeBase:Actor

有人能解释一下为什么会发生这种情况,或者提出一个替代的计算方法吗


编辑:由于未知原因,在启动前创建12个对象。不知道如何修复它以及它为什么会发生

我们发现,unreal创建了CDO(类默认对象),它调用构造函数。因此,我将代码转移到
BeginPlay()
,现在它开始工作了。

静态int id\u计数器在你的
阳极电泳定义中声明?是的,当然,我是编辑问题,泰。好的。是否可能在您没有注意到的情况下创建了12个其他默认构造的
ANodeBase
实例?可能有许多原因导致您的
ANodeBase()
在没有显式调用的情况下被静默调用。可能是委托的CTOR(来自派生类或基类),可能是容器静默地复制/重新分配其
阳极库
项(UE4使用的idk),etcUnreal为每个UClass创建一个CDO(类默认对象)。它本质上是允许您和引擎在任何时候访问任何类的默认属性。构造函数中创建的任何内容都应作为CDO的一部分有效。所以确实需要在其他地方设置id——我忘记了AActor的所有init函数,但我相信您可以在标题中找到与世界注册行一致的内容。如果不是太迟的话,BeginPlay可能也是一个不错的选择。
//ANodeBase.h
static int id_counter;
//ANodeBase.cpp
#include "NodeBase.h"

int ANodeBase::id_counter = 0;

ANodeBase::ANodeBase()
{
    PrimaryActorTick.bCanEverTick = false;
    id = id_counter;
    id_counter++;//the only change to a variable in the project
}