Another possible solution (and one which fixes lots of unexpected behavior):
Note, this applies only to C++ classes/base classes that don’t function as expected.
Many times, problems can be solved by adding “Super::foo(param)” to the top of your Derived::foo(param) definition.
For example, I had the above problem when trying to extend GameModeBase in C++. The default pawn would never spawn. On further inspection, I found that I had failed to call “Super::PostLogin()” inside my DerivedGameMode::PostLogin() method. As soon as I added it, the problem was resolved.
This just ensures that all the good stuff that the base class does actually happens.