Actor will not move until selected in actor

I am trying to move an actor ingame, but the component spawns at 0,0,0, and refuses to move. When its selected in the scene hierarchy, it suddenly decides it wants to move. When it is not given a root, leaving it to generate one and throw a warning in the console log, this issue just doesnt happen. Nor do any components attached in the blueprint interface. What is going on?

Can you show the blueprint code?
Assuming it is not the default player pawn.

This is c++, as the tags mention. There is not a single line of blueprint code used. Though I did forget to show, my bad.

ABullet::ABullet()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

	BulletRoot = CreateDefaultSubobject<USceneComponent>(TEXT("Root"));
	Bullet = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Bullet"));
	SetRootComponent(BulletRoot);
}

// Called when the game starts or when spawned
void ABullet::BeginPlay()
{
	Super::BeginPlay();
	Bullet->SetupAttachment(BulletRoot);
	Bullet->OnComponentHit.AddDynamic(this, &ABullet::OnHit);
	Bullet->OnComponentBeginOverlap.AddDynamic(this, &ABullet::OnOverlap);
}

// Called every frame
void ABullet::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

 	AddActorLocalOffset
 	(FVector (Speed*DeltaTime), true, 0, ETeleportType::None);
}

If i dont include

BulletRoot = CreateDefaultSubobject<USceneComponent>(TEXT("Root"));

and any lines related to it, it does not act like this. Instead it tells me it had no root, and auto-generated one in logs. And as the actor name implies, thats not a permanent solution.

The components are declared as

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	UStaticMeshComponent* Bullet;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	USceneComponent* BulletRoot;

Edit: Found it. SetupAttachment must be executed in construction, and you must re-create the blueprints the class is used in.