Why is my c++ function a Pure blueprint function

You can ignore the message Visual Studio is showing since this is false positive.

In order to override the function in your Blueprint, tag the function as BlueprintNativeEvent and create another function with the following signature

virtual void GetPerceptionLocRot_Implementation(FVector &OutLocation, FRotator &OutRotation);

You then move the implementation of your function to this one. Internally, in your C++ class you can keep calling GetPerceptionLocRot() regularly.

You can check the sample Extend and Override C++ with Blueprints for more information on how to proceed with this.