0

Это в 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)); 

ОК, так Латентные команды asyncrhonous Они стоят в очереди в порядке, а следующий один не будет работать, пока предыдущий. вернулось верно. Я прохожу как указатели и ссылок на значениях в течение всего времени я использую эти конкретные переменные, так как все они выстраивались в очередь сразу в зависимости от их значений перед первой латентной командой была завершена.

так правонарушители - это int32 StartXPNoBuff и EndXPNoBuff. Они интуитивно ориентированы на 0 и устанавливаются (на данный момент это должно быть 0 и 34 соответственно каждый раз) в первой функции Latent WoodChop.

Они установлены правильно, как показывает команда скрытых тестов Test(). Контрольная латентная команда выдает «Var1: [StartXPNoBuff], Var2: [EndXPNoBuff]». Ниже приведены значения, которые я получаю из каждый раз, когда он запускается:

Переменная1: 0, var2: 34 var1: 0, var2: 0 var1: -2, var2: 157761904 var1: -2, var2: 157761904

Я не использую эти переменные до последней скрытой команды (другие команды tahn my debug), поэтому значения не должны меняться.

После получения помощи от других, я поставил UPROPERTY() перед каждой переменной, но это не имело значения, для каждой из них была указательная переменная, но это не имеет никакого значения. Кажется, что ничего не работает.

StartXPBuff и EndXPBuff работают точно так же, их значения устанавливаются с помощью ТОЧНОГО же метода, однако они сохраняют свои значения, и с ними нет проблем. Почему я не могу заставить это работать для первых 2?

+0

Что делает метод 'Test'? Поскольку вы передаете ссылки на переменные, которые были случайно изменены, скорее всего, это преступник. – Nacho

+0

Это просто выводит их значения. Проблема была там до метода Test, метод теста был введен, чтобы помочь отслеживать его. – pingu2k4

+0

Выполняет ли ваша функция '' 'перед тем, как команды async будут завершены? –

ответ

1

Без окружающего кода я предполагаю, что все представленное находится внутри функции RunTest() для простого или сложного теста Unreal Automated.

Передача указателя на локальную переменную (& StartXPNoBuff) в тестовой функции для скрытой команды будет иметь случайные результаты. После завершения тестовой функции локальная переменная выйдет за пределы области. Когда латентная функция запускается во время следующего кадра, у нее просто есть висячий указатель для работы. Он будет указывать на случайную память ...
Если эти переменные необходимо хранить между кадрами, найдите где-нибудь их хранить: AActor в UWorld, глобальную переменную, выделенную в тестовом файле и т. Д. Просто найдите что-то, что будет длиться от кадра до кадра.

 Смежные вопросы

  • Нет связанных вопросов^_^