Проблемы с переопределением функций - PullRequest
0 голосов
/ 10 июня 2019

Я играю в FPS и сейчас добавляю ботов. У меня проблемы с одной функцией, которая показывает переопределенную проблему. Проблема с пустотой - Обладают.

Я не пробовал это.

/****
*this is .h file
*****/
 #pragma once

 #include "CoreMinimal.h"

 #include "AIController.h"

 #include "Engine.h"

 #include "AI_Controller.generated.h"


UCLASS()

class TEST_API AAI_Controller : public AAIController
{

GENERATED_BODY()

public:

    AAI_Controller();

        virtual void BeginPlay() override;

        virtual void Possess(APawn* Pawn) override;

        virtual void Tick(float DeltaSeconds) override;

        virtual FRotator GetControlRotation() const override;

        UFUNCTION()
            void OnPawnDetected(const TArray<AActor*> &DetectedPawns);

        UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = AI)
            float AISightRadius = 500.0f;

        UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = AI)
            float AISightAge = 5.0f;

        UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = AI)
            float AILoseSightRadius = AISightRadius + 50.0f;

        UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = AI)
            float AIFieldOfView = 90.0f;

        UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = AI)
            class UAISenseConfig_Sight* SightConfig;

};

Я ожидал, что void Possess будет работать без ошибок, потому что я не вижу ничего плохого в своем коде и думаю, что это должно работать. это показывает эту ошибку - 'AController :: Possess': функция, объявленная как 'final', не может быть переопределена 'AAI_Controller :: Possess'

Буду благодарен, если кто-нибудь сможет объяснить, что случилось и как это исправить.

1 Ответ

1 голос
/ 10 июня 2019

Проблема в том, что объявление AController::Possess() было объявлено окончательным, поэтому компилятор не позволяет переопределить функцию в AAI_Controller.

Вы можете перейти туда, где объявлен класс AController и удалить ключевое слово final, например: virtual void Possess(APawn* pawn) final до virtual void Possess(APawn* pawn), и это устранит ошибку. Вы должны быть осторожны с этим, хотя, если вы не написали базовый класс, вероятно, есть веская причина, по которой функция была объявлена ​​окончательной

Или, если вы не можете этого сделать и можете изменить сигнатуру функции, просто создайте свою собственную функцию, которая не переопределяет базовую функцию-член.

...