【问题标题】:Setting timers in Unreal Engine C++在虚幻引擎 C++ 中设置计时器
【发布时间】:2017-06-12 05:54:00
【问题描述】:

我在虚幻引擎 4 中创建计时器时遇到问题。问题出在 GetWorldTimerManager 中。当我为此调用 set timer 时,我收到 E0070 不完整类型错误。通常这意味着我没有包含某些内容

void ACubeFarmBlock::HandleClicked()
{
    if (!bIsPlanted)
    {
        bIsPlanted = true;

        // Change material
        BlockMesh->SetMaterial(0, OrangeMaterial);

        // Determine when to harvest
        GetWorldTimerManager().SetTimer(HarvestTimerHandle, &ACubeFarmBlock::Harvest, HarvestTime,false);
    }
}

HarvestTimerHandle 在标题中定义。 以下是包含的列表。 MyActor.h 包含一个定义 GetWorldTimerManager 的方法,所以我想我已经包含了所有内容。值得注意的是,当我在网上查看计时器函数时,我发现了几个站点,其中设置计时器方法包括插入在 HarvestTimerHandle 参数和 &ACubeFormBlock::Harvest 参数之间的 this 参数。包括这一点不会使我的错误消失。

#include "CubeFarmBlock.h"
#include "CubeFarmBlockGrid.h"
#include "UObject/ConstructorHelpers.h"
#include "Components/StaticMeshComponent.h"
#include "Engine/StaticMesh.h"
#include "Materials/MaterialInstance.h"
#include "MyActor.h"

错误:

..\CubeFarmBlock.cpp(76):注意:参见函数模板实例化的参考 'TFunction::TFunction(FunctorType &&)' 正在编译 1> 1> [ 1> FunctorType=void (__cdecl ACubeFarmBlock::* )(float) 1> ]

严重性代码描述项目文件行抑制状态错误(活动)
E0070 不允许不完整的类型 CubeFarm ..\CubeFarmBlock.cpp 78 严重性
代码 描述 项目文件行抑制状态错误(活动) E0070
不允许不完整的类型 CubeFarm ..\CubeFarmBlock.cpp 78

【问题讨论】:

  • 当我为此调用 set timer 时,我得到一个不完整的生物类型错误请复制粘贴错误消息而不解释它们。
  • 1>C:\Users\Teresa\Documents\Unreal Projects\CubeFarm\Source\CubeFarm\CubeFarmBlock.cpp(76):注意:参见函数模板实例化 'TFunction::TFunction(FunctorType &&)' 正在编译 1> 1> [ 1> FunctorType=void (__cdecl ACubeFarmBlock::* )(float) 1> ]
  • 严重性代码描述项目文件行抑制状态错误(活动) E0070 不完整类型不允许 CubeFarm c:\Users\Teresa\Documents\Unreal Projects\CubeFarm\Source\CubeFarm\CubeFarmBlock.cpp 78 严重性代码 描述 项目文件行抑制状态错误(活动) E0070 不允许类型不完整 CubeFarm c:\Users\Teresa\Documents\Unreal Projects\CubeFarm\Source\CubeFarm\CubeFarmBlock.cpp 78
  • edit您的问题,并在问题本身中添加所有相关信息。
  • 完成!如果您需要更多信息,请告诉我。

标签: c++ timer unreal-engine4


【解决方案1】:

在你的头文件中创建一个处理程序 FTimerHandle InputTimeHandle;

然后在你的 cpp 文件中

GetWorld()->GetTimerManager().SetTimer(InputTimeHandle,this, &AMyPlayerController::GetInputTimer, 1, true,0.5f);

你只是缺少参数

【讨论】:

  • 如果您的问题得到解决,请标记为已回答。谢谢。
【解决方案2】:

好吧,作为一个警告,我从来没有使用过 UE4,但是......

此错误表示您正在尝试将成员函数绑定到 TFunction:

'TFunction::TFunction(FunctorType &&)' being compiled 1> with 1> 
    [ 1> FunctorType=void (__cdecl ACubeFarmBlock::* )(float) 1> ]

成员函数需要一个指向的对象。我认为您缺少“this”参数。无需查找,我认为您要么需要:

例如

GetWorldTimerManager().SetTimer(HarvestTimerHandle, this, &ACubeFarmBlock::Harvest, HarvestTime,false);

我在网上找不到任何简单的参考资料,但如果您搜索成员函数指针,也许还有 hidden this parameter,您可以了解发生了什么问题。

【讨论】:

  • 看来我需要这个。网上的其他人已经成功地在代码中使用了这个。但是,它不会让​E0070 消失。此外,这引入了一个新错误:C2664
猜你喜欢
  • 2015-09-24
  • 1970-01-01
  • 2019-07-20
  • 2022-10-22
  • 2016-01-01
  • 2018-09-01
  • 2018-09-12
  • 2015-10-12
  • 2020-09-14
相关资源
最近更新 更多