How to spawn a Blueprint Actor in C++?

Okay, from what I gather is that you have a c++ PlayerCharacter class and that you setup your weapons as a c++ AWeapon class that you then create blueprints for.

Why not just create a member in the PlayerCharater class and expose it to blueprints. Then create a blueprint for PlayerCharacter, and then set the weapons there.

For example, in PlayerCharacter:

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Guns, meta=(AllowPrivateAccess = "true"))
class UClass* Weapon;

Then when you have BP_PlayerCharacter, you should see the property in the editor window.

If it is really something you need to spawn, then do something like:

FVector SpawnLocation = GetActorLocation();
UWorld* const World = GetWorld();
if (World != NULL) {
    if (Weapon) {
	World->SpawnActor<AWeapon>(Weapon, SpawnLocation, GetActorRotation());
    }
}

This is basically what I do for weapon projectiles.