Override BlueprintNativeEvent GetDefaultPawnClassForController in C++

I can’t seem to figure out how to make this function virtual. I’ve read that this should work, but I’m getting a compile error saying that the _Implementation function already exists.

/** returns default pawn class for given controller */
UFUNCTION(BlueprintNativeEvent, Category="Game")
UClass* GetDefaultPawnClassForController(AController* InController);
virtual UClass* GetDefaultPawnClassForController_Implementation(AController* InController);

To make matters even more frustrating, I searched around for an example in code and this works fine:

/** Event fired when the character has just started jumping */
UFUNCTION(BlueprintNativeEvent, Category="Pawn|Character")
void OnJumped();
virtual void OnJumped_Implementation();

Does it have something to do with using GENERATED_UCLASS_BODY() vs GENERATED_BODY()?

Thanks!

Welp, feeling kinda dumb cause I guess the _Implementation function that is autogenerated from GameMode.h is virtual cause all I had to do was add this declaration to my derived GameMode class header and then write the function implementation in the cpp file.

virtual UClass* GetDefaultPawnClassForController_Implementation(AController* InController) override;

the base class should declare the _Implementation virtual too for these who wander