TArrays with inherited objects problem

What you’re expecting here is that your array types are covariant, which is something that languages like C# and Java have implemented for their generic types. However, C++ templates are not generics and do not support covariance just like that. What you get in C++ is that your TArray<ABaseCharacter*> and TArray<APlayerCharacter*> classes are two completely separate copies of the TArray template with no direct conversion defined between them. You can still add an APlayerCharacter* to your TArray<ABaseCharacter*> because APlayerCharacter inherits from ABaseCharacter, but that doesn’t mean that the TArray<APlayerCharacter*> class automatically inherits from the TArray<ABaseCharacter*> class.