'TDelegate<bool (float),FDefaultDelegateUserPolicy>::CreateUObject': no overloaded function could convert all the argument types

Hi!

I’m using FTSTicker in a GameInstanceSubsystem and I need to pass more arguments, TArray and TSubclassOf<ASLStarActor>, to the method used in `FTickerDelegate`.

To do it I have tried this:

Source file:

FTickerDelegate TickerDelegateHandler =
     FTickerDelegate::CreateUObject(
          this,
          &USMyGameInstanceSubsys::HandleTickerDelegate,
          Stars,
          BlueprintStar);

 FTSTicker::FDelegateHandle TickDelegateHandle = FTSTicker::GetCoreTicker().AddTicker(TickerDelegateHandler);

Method signature:

bool HandleTickerDelegate(float DeltaSeconds,
TArray<FStar>& Stars,
TSubclassOf<ASLStarActor> BlueprintStar);

With the following errors:

error C2665: 'TDelegate<bool (float),FDefaultDelegateUserPolicy>::CreateUObject': no overloaded function could convert all the argument types
1> FTickerDelegate::CreateUObject(
1> ^
1>C:\Program Files\Epic Games\UE_5.8\Engine\Source\Runtime\Core\Public\Delegates\DelegateSignatureImpl.inl(586,79): note: could be 'TDelegate<bool (float),FDefaultDelegateUserPolicy> TDelegate<bool (float),FDefaultDelegateUserPolicy>::CreateUObject<USMyGameInstanceSubsys,TArray<FStar,FDefaultAllocator>&,TSubclassOf&>(const UserClass ,bool (__cdecl USMyGameInstanceSubsys:: )(float,TArray<FStar,FDefaultAllocator>,TSubclassOf) const,TArray<FStar,FDefaultAllocator> &,TSubclassOf &)'
1> with
1> [
1> UserClass=USMyGameInstanceSubsys
1> ]
1> [[nodiscard]] inline static TDelegate<RetValType(ParamTypes...), UserPolicy> CreateUObject(const UserClass* InUserObject, typename TMemFunPtrType<true, UserClass, RetValType (ParamTypes..., std::decay_t...)>::Type InFunc, VarTypes&&... Vars)
1> ^
1>C:\Source\MyGame\Source\MyModule\Private\SDMyGameInstanceSubsys.cpp(178,21): note: 'TDelegate<bool (float),FDefaultDelegateUserPolicy> TDelegate<bool (float),FDefaultDelegateUserPolicy>::CreateUObject<USMyGameInstanceSubsys,TArray<FStar,FDefaultAllocator>&,TSubclassOf&>(const UserClass ,bool (__cdecl USMyGameInstanceSubsys:: )(float,TArray<FStar,FDefaultAllocator>,TSubclassOf) const,TArray<FStar,FDefaultAllocator> &,TSubclassOf &)': cannot convert argument 2 from 'bool (__cdecl USMyGameInstanceSubsys::* )(float,TArray<FStar,FDefaultAllocator> &,TSubclassOf)' to 'bool (__cdecl USMyGameInstanceSubsys::* )(float,TArray<FStar,FDefaultAllocator>,TSubclassOf) const'
1> with
1> [
1> UserClass=USMyGameInstanceSubsys
1> ]
1> FTickerDelegate::CreateUObject(
1> ^
1>C:\Source\MyGame\Source\MyModule\Private\SDMyGameInstanceSubsys.cpp(180,5): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or parenthesized function-style cast
1> &USMyGameInstanceSubsys::HandleTickerDelegate,
1> ^
1>C:\Program Files\Epic Games\UE_5.8\Engine\Source\Runtime\Core\Public\Delegates\DelegateSignatureImpl.inl(577,79): note: or 'TDelegate<bool (float),FDefaultDelegateUserPolicy> TDelegate<bool (float),FDefaultDelegateUserPolicy>::CreateUObject<USMyGameInstanceSubsys,TArray<FStar,FDefaultAllocator>&,TSubclassOf&>(UserClass ,bool (__cdecl USMyGameInstanceSubsys:: )(float,TArray<FStar,FDefaultAllocator>,TSubclassOf),TArray<FStar,FDefaultAllocator> &,TSubclassOf &)'
1> with
1> [
1> UserClass=USMyGameInstanceSubsys
1> ]
1> [[nodiscard]] inline static TDelegate<RetValType(ParamTypes...), UserPolicy> CreateUObject(UserClass* InUserObject, typename TMemFunPtrType<false, UserClass, RetValType (ParamTypes..., std::decay_t...)>::Type InFunc, VarTypes&&... Vars)
1> ^
1>C:\Source\MyGame\Source\MyModule\Private\SDMyGameInstanceSubsys.cpp(178,21): note: 'TDelegate<bool (float),FDefaultDelegateUserPolicy> TDelegate<bool (float),FDefaultDelegateUserPolicy>::CreateUObject<USMyGameInstanceSubsys,TArray<FStar,FDefaultAllocator>&,TSubclassOf&>(UserClass ,bool (__cdecl USMyGameInstanceSubsys:: )(float,TArray<FStar,FDefaultAllocator>,TSubclassOf),TArray<FStar,FDefaultAllocator> &,TSubclassOf &)': cannot convert argument 2 from 'bool (__cdecl USMyGameInstanceSubsys::* )(float,TArray<FStar,FDefaultAllocator> &,TSubclassOf)' to 'bool (__cdecl USMyGameInstanceSubsys::* )(float,TArray<FStar,FDefaultAllocator>,TSubclassOf)'
1> with
1> [
1> UserClass=USMyGameInstanceSubsys
1> ]
1> FTickerDelegate::CreateUObject(
1> ^
1>C:\Source\MyGame\Source\MyModule\Private\SDMyGameInstanceSubsys.cpp(180,5): note: Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or parenthesized function-style cast
1> &USMyGameInstanceSubsys::HandleTickerDelegate,
1> ^
1>C:\Program Files\Epic Games\UE_5.8\Engine\Source\Runtime\Core\Public\Delegates\DelegateSignatureImpl.inl(602,79): note: or 'TDelegate<bool (float),FDefaultDelegateUserPolicy> TDelegate<bool (float),FDefaultDelegateUserPolicy>::CreateUObject(TObjectPtr,TMemFunPtrType<true,UserClass,bool(float,decay::type...)>::Type,VarTypes ...)'
1> [[nodiscard]] inline static TDelegate<RetValType(ParamTypes...), UserPolicy> CreateUObject(TObjectPtr InUserObject, typename TMemFunPtrType<true, UserClass, RetValType (ParamTypes..., std::decay_t...)>::Type InFunc, VarTypes&&... Vars)
1> ^
1>C:\Source\MyGame\Source\MyModule\Private\SDMyGameInstanceSubsys.cpp(178,21): note: 'TDelegate<bool (float),FDefaultDelegateUserPolicy> TDelegate<bool (float),FDefaultDelegateUserPolicy>::CreateUObject(TObjectPtr,TMemFunPtrType<true,UserClass,bool(float,decay::type...)>::Type,VarTypes ...)': could not deduce template argument for 'TObjectPtr' from 'USMyGameInstanceSubsys *'
1> FTickerDelegate::CreateUObject(
1> ^
1>C:\Program Files\Epic Games\UE_5.8\Engine\Source\Runtime\Core\Public\Delegates\DelegateSignatureImpl.inl(593,79): note: or 'TDelegate<bool (float),FDefaultDelegateUserPolicy> TDelegate<bool (float),FDefaultDelegateUserPolicy>::CreateUObject(TObjectPtr,TMemFunPtrType<false,UserClass,bool(float,decay::type...)>::Type,VarTypes ...)'
1> [[nodiscard]] inline static TDelegate<RetValType(ParamTypes...), UserPolicy> CreateUObject(TObjectPtr InUserObject, typename TMemFunPtrType<false, UserClass, RetValType (ParamTypes..., std::decay_t...)>::Type InFunc, VarTypes&&... Vars)
1> ^
1>C:\Source\MyGame\Source\MyModule\Private\SDMyGameInstanceSubsys.cpp(178,21): note: 'TDelegate<bool (float),FDefaultDelegateUserPolicy> TDelegate<bool (float),FDefaultDelegateUserPolicy>::CreateUObject(TObjectPtr,TMemFunPtrType<false,UserClass,bool(float,decay::type...)>::Type,VarTypes ...)': could not deduce template argument for 'TObjectPtr' from 'USMyGameInstanceSubsys *'
1> FTickerDelegate::CreateUObject(
1> ^
1>C:\Source\MyGame\Source\MyModule\Private\SDMyGameInstanceSubsys.cpp(178,21): note: while trying to match the argument list '(USMyGameInstanceSubsys , bool (__cdecl USMyGameInstanceSubsys:: )(float,TArray<FStar,FDefaultAllocator> &,TSubclassOf), TArray<FStar,FDefaultAllocator>, TSubclassOf)'
1>C:\Source\MyGame\Source\MyModule\Private\SDMyGameInstanceSubsys.cpp(535,17): error C4458: declaration of 'AllStars' hides class member
1> TArray& AllStars,
1> ^
1>C:\Source\MyGame\Source\MyModule\Private\SDMyGameInstanceSubsys.h(110,16): note: see declaration of 'USMyGameInstanceSubsys::AllStars'
1> TArray AllStars;

The question is whether I need to add those two additional parameters to the method that’s going to use them. I suppose so, but I’m asking because I don’t understand the error.