I think it is somewhat like the following:
When we introduced the color change of the crosshair it worked fine, because we had defined, what the TankAimingComponent is, in the Tank.h and Tank.cpp
UPROPERTY (BlueprintReadOnly)
UTankAimingComponent* TankAimingComponent = nullptr;
and in the Tank.cpp we assigned the variable TankAimingComponent to the actual component in while constructing it:
TankAimingComponent = CreateDefaultSubobject<UTankAimingComponent>(TEXT("Aiming Component"))
But in the next lectures, during the refactoring, this code got deleted, so there is no definition of the TankAimingComponent inside the Tank.h/Tank.cpp anymore.
That means, if we are still trying to get the TankAimingComponent from the Tank (which we are trying to do at the PlayerController Blueprint by getting the tank and then extracting the variable TankAimingComponent (which now doesn’t exist anymore)) it doesn’t work.
That’s why we need another way of getting the TankAimingComponent, which is looking for all Component of the Tank and then just take the one which is also of the class TankAimingComponent.
For my understanding it has nothing to do with all the timing explanations, but just because the code got deleted during refactoring.