Should Circular Dependencies crash the editor? Despite forward declarations?

So I’m new to Unreal 4 and only been programming in C++ for about a year. So I may not understand the problem of circular dependencies and forward declaration as well as I believe.

I’ve been trying to circumvent a case where I would have circular dependencies that would crash the editor when built. I tried to make sure I had forward declarations and this kept the editor from crashing, but then when I actually use the class that was imported in a member function, it crashes again.

What I’m doing is trying to have the speed of my projectiles adjustable. So the projectile needs to reference the player character class for the new initial speed. The character needs to spawn the projectile so therein I have my circular dependency. I made sure at the top of each class’s header file to forward declare the other class, and then within the .cpp file I import the header file of the other class. Like I learned. Again, it doesn’t crash until I actually try and use the class in a function, but only for the character class when it is used in the projectile class. There isn’t a problem with spawning the projectile. Just calling GetSpeed() from Character class.

Am I just missing something about circular dependencies? From the material I’ve read online (some from unreal’s website) I should be doing this correctly.

// projectile.h

#pragma once
#include "GameFramework/Actor.h"
#include "MyProjectile.generated.h"
class MyCharacter;

// character.h

#pragma once
#include "GameFramework/Character.h"
#include "MyCharacter.generated.h"
class MyProjectile;
class UInputComponent;

// projectile.cpp

#include "MyProject.h"
#include "MyProjectile.h"
#include "MyCharacter.h"
#include "GameFramework/ProjectileMovementComponent.h"

//inside of constructor (this is what crashes the program)
for (TActorIterator<MyCharacter> Itr(GetWorld()); Itr; ++Itr) {
	ProjectileMovement->InitialSpeed = Itr->GetInitBulletSpeed();
	ProjectileMovement->MaxSpeed = Itr->GetInitBulletSpeed();
}

// character.cpp

#include "MyProject.h"
#include "MyCharacter.h"
#include "MyProjectile.h"
#include "Animation/AnimInstance.h"
#include "GameFramework/InputSettings.h"
#include "Kismet/HeadMountedDisplayFunctionLibrary.h"
#include "MotionControllerComponent.h"
#include "Runtime/Engine/Public/EngineUtils.h"

// inside of OnFire
const FRotator SpawnRotation = GetControlRotation();
// MuzzleOffset is in camera space, so transform it to world space before offsetting from the character location to       
//find the final muzzle position
const FVector SpawnLocation = ((FP_MuzzleLocation != nullptr) ? FP_MuzzleLocation->GetComponentLocation() : GetActorLocation()) + SpawnRotation.RotateVector(GunOffset);

// spawn the projectile at the muzzle
World->SpawnActor<MyProjectile>(ProjectileClass, SpawnLocation, SpawnRotation);