abstract actor,call the subclass's function in father function.

This is incorrect. Unreal constructs an instance of every UCLASS and USTRUCT in order to act as the Class Default Object for that type. The Abstract specifier will cause the engine to prevent any further instances from being created, but at least 1 does need to be created.

This limitation is why pure virtual functions (virtual = 0) are not allowed in UCLASS’s. You can emulate them by using the PURE_VIRTUAL macro the engine provides, but it will only generate an error when non-overriden function is called. You can declare them in interfaces, but the same limitation means that your UCLASS has to provide an implementation of the pure virtual functions in order to compile properly.

@CorgiofLiu Marking your ASoldierBase class as Abstract and providing an empty implementation of PrepareBattle when you initially declare it virtual is the expected setup. You can use the PURE_VIRTUAL macro I mentioned before if you want.