【问题标题】:The method with the override invalidator did not invalidate any base class method具有覆盖无效器的方法没有使任何基类方法无效
【发布时间】: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


【解决方案1】:

问题在于这不是虚拟方法。他们已经更改了 API,而我遵循的是一个旧示例。

不,我可以使用虚拟的NotifyHit,我可以覆盖它:

virtual void NotifyHit
(
    class UPrimitiveComponent * MyComp,
    AActor * Other,
    class UPrimitiveComponent * OtherComp,
    bool bSelfMoved,
    FVector HitLocation,
    FVector HitNormal,
    FVector NormalImpulse,
    const FHitResult & Hit
)

【讨论】:

    猜你喜欢
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多