C++ Spawn decal at OnComponentHit location?

Hi, I can’t seem to figure this one out on my own, or find a solid answer. I’ve created a deferred decal with a blood splat texture. I’ve created a simple Actor c++ class, in which I assign a mesh for visual and sphere component for collision. In this class I have a void function named OnHit, which I add dynamically to OnComponentHit for the SphereComponent. This all works fine, I can debug the hit by shooting a message out on collision. I can also spawn an actor that is from one of my classes, for example

.h
TSubclassOf<SomeActor> Clone;

.cpp
Clone = SomeActor::StaticClass();

OnHit(params)
{
    MyDebugFunction("Hit");
    SomeActor* MyClone = GetWorld()->SpawnActor<SomeActor>(Clone, Loc, Rot, Params);
}

My problem is, I can’t create a C++ DecalActor, this causes the editor to crash when I attempt. When I create a C++ class from DecalComponent, all I get is the same generated code I’d get from the typical AActor type of class. I’ve also tried creating a blueprint out of my decal, as a prefab. Then I am able to grab that class with something like

.h
UBlueprint* Decal;

.cpp
static ConstructorHelpers::FObjectFinder<UBlueprint>DecalBP(TEXT("Blueprint'/Game/Blueprints/MyBP.MyBP'"));
if(DecalBP.Object != nullptr)
    Decal = DecalBP.Object;

I can build successfully, but when I try to spawn this, nothing but the “Hit” message works. Is there any way I can create a Deffered Decal in my scene, then create a C++ class from it? It doesn’t seem there would be, so how would I go about grabbing my “prefab” or Blueprint, then spawn it via C++ code in my Actor’s Hit event?

Here is how you spawn a decal on location hit.
You don’t need a sphere component for an OnHit functions when you call the OnHitFunction in the begin play function use the static mesh of your class. You use the sphere component for on begin overlap functions.

   //.h
         //Creating the UMat.
         UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "BloodDecal")
                 UMaterialInstance* Decal;
          UFUNCTION()
           void ASphere::OnSphereCollHit(UPrimitiveComponent* HitComp, AActor* OtherActor, 
            UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit)
         //.cpp
        /*Call this in the beginplay or constructor depending on your version of unreal engine.*/
        SphereComponent->OnComponentHit.AddDynamic(this, &ASphere::OnSphereCollHit);
         void ASphere::OnSphereCollHit(UPrimitiveComponent* HitComp, AActor* OtherActor, 
           UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult& Hit)
         {
             FVector DecalSize(20.0f, 20.0f, 20.0f);
             FRotator RandomDecalRotation = Hit.Location.Rotation();
             FVector DecalLocation = Hit.Location;
               /*Here is the function you are looking for.*/
                //The first parameter is the actor the ball comes in contact with, the second is the decal itself, the third is 
               //how large you want the decal to be, the forth is the location of the decal upon impact the fifth is how you 
               //want the rotation of the decal to be upon impact.
             UGameplayStatics::SpawnDecalAtLocation(OtherActor, Decal, DecalSize, DecalLocation, 
             RandomDecalRotation);
         }