【发布时间】:2016-11-16 16:34:47
【问题描述】:
我正在使用 Visual Studio 2015 Enterprise 学习 Unreal Engine 4.13.2 和 C++。
我认为我的问题是 C++,所以我认为最好的地方是在这里。
我有一个继承自 AActor 类的 C++ 类。我必须从 AActor 重写一个方法,所以我把它放在我的头文件中:
virtual void ReceiveHit(class UPrimitiveComponent* MyComp, class AActor* Other, class UPrimitiveComponent* OtherComp, bool bSelfMoved, FVector HitLocation, FVector HitNormal, FVector NormalImpulse, const FHitResult& Hit);
而且我已经在cpp文件中实现了。
但我得到以下编译器错误:
MyActor.h(23): 错误 C3668: 'MyActor::ReceiveHit': 具有 override invalidator 没有使任何基类方法失效
我已从 AActor.h 文件中复制了 ReceiveHit 方法,但出现了该错误。
我还有另一种方法被覆盖而没有问题。这是MyActor 头文件:
#pragma once
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"
UCLASS()
class MYGAME_API AMyActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AMyActor();
// Called when the game starts or when spawned
virtual void BeginPlay() override;
// Called every frame
virtual void Tick( float DeltaSeconds ) override;
virtual void ReceiveHit(class UPrimitiveComponent* MyComp, AActor* Other, class UPrimitiveComponent* OtherComp, bool bSelfMoved, FVector HitLocation, FVector HitNormal, FVector NormalImpulse, const FHitResult& Hit) override;
private:
UProjectileMovementComponent* MyMovement;
};
我该如何解决这个错误?
【问题讨论】:
-
根据documentation该函数不是虚拟的,所以你不能覆盖它
-
@UnholySheep 也许我遵循了一个旧教程。
-
@UnholySheep 看看这个:wiki.unrealengine.com/Reflecting_Projectile_C%2B%2B。在这里,ReceiveHit 被定义为虚拟的。所以,我不需要使用 override 来实现它,不是吗?我必须打电话给 Super::ReceiveHit 吗?
-
检查您正在构建的标头中的定义。编译器告诉您它不是虚拟的,或者至少您指定要覆盖的签名不是虚拟的。可能是界面变了?
-
是的。无需删除!这是一个有效的问题 IMO 并证明了覆盖的重要性!还有文档 - docs.unrealengine.com/latest/INT/API/Runtime/Engine/…
标签: c++ unreal-engine4