C++ Create instance of class then call function on it

you have to cast it. and to call the functions on an object, cpp needs you to explicitly state the class.
so UObject* is not enough. you need to have something like
" UBaseClass* ItemCasted = Cast< UBaseClass >(ItemInstance);"
and make sure you define the function on the base class. it will work using polymorfism which is somewhat basic functionality.
you can also use UFUNCTION(BlueprintNativeEvent) to allow bps to override it too.

otherwise you can use interfaces, but i don’t really like them much.

there are other ways to call a function by name on bp, but that’d be a bit hackish from my pov.