为什么我的变量被覆盖了?
Why are my variables written over?
这在 Unreal Engine 中,所以确实使用了其中的一些代码,但这应该是我遇到的标准 C++ 问题,因此我将其张贴在这里。我对指针知之甚少,所以可能搞砸了这里的东西。
编写自动化测试,但这在大多数情况下应该无关紧要。
我有一些整数,其中 2 个没有保留我存储在其中的值。这是我当前的代码(带有我用来调试的额外不必要的东西:
UPROPERTY()
ARSRPlayerCharacter* PlayerCharacterX = TestUtils::GetFirstPlayerCharacterServer();
UPROPERTY()
ARSRPlayerCharacter* PlayerCharacterY = TestUtils::GetAdditionalPlayerCharacterServer(2);
UPROPERTY()
int32 StartXPNoBuff = 0;
UPROPERTY()
int32 EndXPNoBuff = 0;
UPROPERTY()
int32 StartXPBuff = 0;
UPROPERTY()
int32 EndXPBuff = 0;
UPROPERTY()
int32 PlayerWoodcuttingXP = 0;
UPROPERTY()
int32* StartXPNoBuffPtr = &StartXPNoBuff;
UPROPERTY()
int32* EndXPNoBuffPtr = &EndXPNoBuff;
UPROPERTY()
int32* StartXPBuffPtr = &StartXPBuff;
UPROPERTY()
int32* EndXPBuffPtr = &EndXPBuff;
PlayerWoodcuttingXP = PlayerCharacterX->SkillsComponent->GetWoodcuttingXP();
ADD_LATENT_AUTOMATION_COMMAND(ChopWood(PlayerCharacterX, PlayerWoodcuttingXP, true, StartXPNoBuff, EndXPNoBuff));
ADD_LATENT_AUTOMATION_COMMAND(Test(&StartXPNoBuff, &EndXPNoBuff));
ADD_LATENT_AUTOMATION_COMMAND(FWaitLatentCommand(5.0f));
ADD_LATENT_AUTOMATION_COMMAND(Test(&StartXPNoBuff, &EndXPNoBuff));
ADD_LATENT_AUTOMATION_COMMAND(TeleportPlayer(PlayerCharacterY, FVector(5499.0f, 2848.0f, 215.0f)));
ADD_LATENT_AUTOMATION_COMMAND(Test(&StartXPNoBuff, &EndXPNoBuff));
ADD_LATENT_AUTOMATION_COMMAND(ChopWood(PlayerCharacterX, PlayerWoodcuttingXP, true, StartXPBuff, EndXPBuff));
ADD_LATENT_AUTOMATION_COMMAND(Test(&StartXPNoBuff, &EndXPNoBuff));
ADD_LATENT_AUTOMATION_COMMAND(CheckXPImproves(this, StartXPNoBuffPtr, EndXPNoBuffPtr, StartXPBuffPtr, EndXPBuffPtr));
OK, so Latent commands are asyncrhonous. They are queued up in order, and the next one will not run until the previous has returned true. I pass as pointers and reference the values inside for all times I use these specific variables, as they are all queued up right away based on their values before the first latent command has been completed.
所以违规者是 int32 StartXPNoBuff 和 EndXPNoBuff。初始化为0,在第一个Latent WoodChop函数中设置(暂时每次应该分别为0和34)
如 Test() 潜在命令所示,它们设置正确。测试潜在命令输出 "Var1: [StartXPNoBuff], Var2: [EndXPNoBuff]"。这是我每次得到的值 运行:
变量 1:0,变量 2:34
变量 1:0,变量 2:0
Var1:-2,Var2:157761904
Var1:-2,Var2:157761904
直到最后的潜在命令(其他tahn我的调试命令)我才使用这些变量,所以这些值不应该改变。
在得到别人的帮助后,我将 UPROPERTY() 放在每个变量的前面,但这没有任何区别,每个变量都有一个指针变量,但这没有区别,似乎没有任何作用。
StartXPBuff 和 EndXPBuff 的工作方式完全相同,它们的值是从完全相同的方法中设置的,但是它们保留了它们的值并且没有问题。为什么我不能让它在前 2 个工作?
如果没有周围的代码,我假设所有呈现的内容都在 RunTest() 函数内,用于简单或复杂的 Unreal 自动化测试。
将测试函数中局部变量(&StartXPNoBuff)的指针传递给潜在命令将产生随机结果。测试函数完成后,局部变量将超出范围。当潜在函数在下一帧运行时,它只有一个悬空指针可以使用。它将指向随机内存...
如果这些变量需要保留在帧之间,找个地方存储它们:UWorld 中的 AActor,测试文件中分配的全局变量等...只需找到可以在帧与帧之间持续的东西。
这在 Unreal Engine 中,所以确实使用了其中的一些代码,但这应该是我遇到的标准 C++ 问题,因此我将其张贴在这里。我对指针知之甚少,所以可能搞砸了这里的东西。
编写自动化测试,但这在大多数情况下应该无关紧要。
我有一些整数,其中 2 个没有保留我存储在其中的值。这是我当前的代码(带有我用来调试的额外不必要的东西:
UPROPERTY()
ARSRPlayerCharacter* PlayerCharacterX = TestUtils::GetFirstPlayerCharacterServer();
UPROPERTY()
ARSRPlayerCharacter* PlayerCharacterY = TestUtils::GetAdditionalPlayerCharacterServer(2);
UPROPERTY()
int32 StartXPNoBuff = 0;
UPROPERTY()
int32 EndXPNoBuff = 0;
UPROPERTY()
int32 StartXPBuff = 0;
UPROPERTY()
int32 EndXPBuff = 0;
UPROPERTY()
int32 PlayerWoodcuttingXP = 0;
UPROPERTY()
int32* StartXPNoBuffPtr = &StartXPNoBuff;
UPROPERTY()
int32* EndXPNoBuffPtr = &EndXPNoBuff;
UPROPERTY()
int32* StartXPBuffPtr = &StartXPBuff;
UPROPERTY()
int32* EndXPBuffPtr = &EndXPBuff;
PlayerWoodcuttingXP = PlayerCharacterX->SkillsComponent->GetWoodcuttingXP();
ADD_LATENT_AUTOMATION_COMMAND(ChopWood(PlayerCharacterX, PlayerWoodcuttingXP, true, StartXPNoBuff, EndXPNoBuff));
ADD_LATENT_AUTOMATION_COMMAND(Test(&StartXPNoBuff, &EndXPNoBuff));
ADD_LATENT_AUTOMATION_COMMAND(FWaitLatentCommand(5.0f));
ADD_LATENT_AUTOMATION_COMMAND(Test(&StartXPNoBuff, &EndXPNoBuff));
ADD_LATENT_AUTOMATION_COMMAND(TeleportPlayer(PlayerCharacterY, FVector(5499.0f, 2848.0f, 215.0f)));
ADD_LATENT_AUTOMATION_COMMAND(Test(&StartXPNoBuff, &EndXPNoBuff));
ADD_LATENT_AUTOMATION_COMMAND(ChopWood(PlayerCharacterX, PlayerWoodcuttingXP, true, StartXPBuff, EndXPBuff));
ADD_LATENT_AUTOMATION_COMMAND(Test(&StartXPNoBuff, &EndXPNoBuff));
ADD_LATENT_AUTOMATION_COMMAND(CheckXPImproves(this, StartXPNoBuffPtr, EndXPNoBuffPtr, StartXPBuffPtr, EndXPBuffPtr));
OK, so Latent commands are asyncrhonous. They are queued up in order, and the next one will not run until the previous has returned true. I pass as pointers and reference the values inside for all times I use these specific variables, as they are all queued up right away based on their values before the first latent command has been completed.
所以违规者是 int32 StartXPNoBuff 和 EndXPNoBuff。初始化为0,在第一个Latent WoodChop函数中设置(暂时每次应该分别为0和34)
如 Test() 潜在命令所示,它们设置正确。测试潜在命令输出 "Var1: [StartXPNoBuff], Var2: [EndXPNoBuff]"。这是我每次得到的值 运行:
变量 1:0,变量 2:34 变量 1:0,变量 2:0 Var1:-2,Var2:157761904 Var1:-2,Var2:157761904
直到最后的潜在命令(其他tahn我的调试命令)我才使用这些变量,所以这些值不应该改变。
在得到别人的帮助后,我将 UPROPERTY() 放在每个变量的前面,但这没有任何区别,每个变量都有一个指针变量,但这没有区别,似乎没有任何作用。
StartXPBuff 和 EndXPBuff 的工作方式完全相同,它们的值是从完全相同的方法中设置的,但是它们保留了它们的值并且没有问题。为什么我不能让它在前 2 个工作?
如果没有周围的代码,我假设所有呈现的内容都在 RunTest() 函数内,用于简单或复杂的 Unreal 自动化测试。
将测试函数中局部变量(&StartXPNoBuff)的指针传递给潜在命令将产生随机结果。测试函数完成后,局部变量将超出范围。当潜在函数在下一帧运行时,它只有一个悬空指针可以使用。它将指向随机内存...
如果这些变量需要保留在帧之间,找个地方存储它们:UWorld 中的 AActor,测试文件中分配的全局变量等...只需找到可以在帧与帧之间持续的东西。