C++ casting fail

#In MyCharacterController.cpp

MyCharacterController::MyCharacterController()
{
  PlayerCameraManagerClass = AMyCameraManager::StaticClass();
}

and I want call AMyCameraManager’s custom function

#In AMyCameraManager.cpp

void AMyCameraManager's ::CustomFun_1(void)
{

}

#In MyCharacterController.cpp

void Tick(float _time)
{

PlayerCameraManagerClass->CustomFun(); 
/*it cant, because  PlayerCameraManagerClass's pointer is still CameraMangerClass */



//so.. I need Down Casting

AMyCameraManager* pCastingValue = Cast<AMyCameraManager>(PlayerCameraManagerClass);

pCastingValue ->CustomFun_1();
}

#but!!!
#Casting failed and return NULL

#what’s going on? T_T

Calling X::StaticClass() on any UObject gets the UClass Object associated with that class. That Object is used for reflection. This is not an instance of X but a meta object describing X.

With :

AMyCameraManager* pCastingValue = Cast<AMyCameraManager>(PlayerCameraManagerClass);

you are trying to cast this meta object to an instance of that class which fails.

I guess MyCharacterController inherits from APlayerController? Try to use the PlayerCameraManager field instead:

AMyCameraManager* pCastingValue = Cast<AMyCameraManager>(PlayerCameraManager);

This field should be automatically initialized by setting the PlayerCameraManagerClass field.

You can also check if the cast was successful by wrapping the call in an if to not crash the game:

if (pCastingValue) {
    pCastingValue ->CustomFun_1();
} else {
    logerrorsomehow();
}

Thank you So mush :slight_smile: