Dies ist in der Unreal Engine, so verwendet einige Code von diesem, aber das sollte ein Standard C++ - Problem sein, das ich von dem habe, was ich sagen kann, warum ich es hier poste. Ich weiß wenig über Zeiger, also habe ich hier wahrscheinlich etwas durcheinander gebracht.Warum werden meine Variablen überschrieben?
Einen Automatisierungstest schreiben, aber das sollte eigentlich keine Rolle spielen.
Ich habe einige Ganzzahlen, und 2 von ihnen halten nicht die Werte, die ich in ihnen speichern. Hier ist meine aktuellen Code ist (mit extra unneccesary Sachen, die ich zu debuggen bin mit:
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-Befehle sind asyncrhonous Sie werden in der Reihenfolge der Warteschlange, und der nächste wird erst ausgeführt, wenn die vorherige. zurückgekehrt ist wahr. ich als Zeiger übergeben und die Werte Referenz für alle Zeiten innerhalb ich diese spezifischen Variablen verwenden, da sie alle Warteschlange gestellt sofort auf der Grundlage ihrer Werte werden vor dem ersten latenten Befehl abgeschlossen ist.
so die Täter sind int32 StartXPNoBuff und EndXPNoBuff, sie werden auf 0 initialisiert und gesetzt (vorerst sollte es sein 0 und 34 jeweils) in der ersten Latent WoodChop-Funktion.
Sie sind korrekt eingestellt, wie der latente Befehl Test() anzeigt. Der Test-Latenz-Befehl gibt "Var1: [StartXPNoBuff], Var2: [EndXPNoBuff]" aus. Hier sind die Werte, die ich von jeder Zeit aussteigen es ausgeführt wird:
Var1: 0, Var2: 34 Var1: 0, Var2: 0 Var1: -2, Var2: 157761904 Var1: -2, Var2: 157761904
Ich benutze diese Variablen nicht bis zum letzten latenten Befehl (anders bei meinen Debug-Befehlen), also sollten sich die Werte nicht ändern.
Nachdem ich von anderen Hilfe geholt hatte, setzte ich UPROPERTY() vor jede Variable, aber das machte keinen Unterschied, hatte eine Zeigervariable für jeden, aber das macht keinen Unterschied, Nichts scheint zu funktionieren.
StartXPBuff und EndXPBuff arbeiten genau auf die gleiche Weise, ihre Werte werden innerhalb der EXACT gleichen Methode gesetzt, aber diese behalten ihre Werte und es gibt kein Problem damit. Warum kann ich das nicht für die ersten 2 schaffen?
Was macht die 'Test'-Methode? Da Sie Referenzen der Variablen übergeben, die zufällig geändert werden, scheint wahrscheinlich der Täter zu sein. – Nacho
Dies gibt nur ihre Werte aus. Das Problem war dort vor der Testmethode, die Testmethode wurde eingefügt, um das Auffinden zu erleichtern. – pingu2k4
Erreicht Ihre Funktion ein '}', bevor die Async-Befehle abgeschlossen sind? –