Tencent/puerts

[UE] Bug: 静态绑定 UGameplayTagsManager的Get函数报错2

Closed this issue · 6 comments

前置阅读 | Pre-reading

Puer的版本 | Puer Version

1.0.6.p1

UE的版本 | UE Version

5.1.1

发生在哪个平台 | Platform

Editor(win)

错误信息 | Error Message

Source\JsEnv\Public\StaticCall.hpp(670): error C2248: 'UGameplayTagsManager::UGameplayTagsManager': cannot access private member declared in class 'UGameplayTagsManager'

D:\Program Files\UE\5.1\5.1.1\23073100\Engine\Source\Runtime\GameplayTags\Classes\GameplayTagsManager.h(298): note: see declaration of 'UGameplayTagsManager::UGameplayTagsManager'
1>D:\Program Files\UE\5.1\5.1.1\23073100\Engine\Plugins\Runtime\GameplayAbilities\Source\GameplayAbilities\Public\GameplayCueTranslator.h(14): note: see declaration of 'UGameplayTagsManager'
1>D:\pw_cn_cn\trunk\Plugins\Puerts\Source\JsEnv\Public\StaticCall.hpp(833): note: see reference to function template instantiation 'bool puerts::internal::FuncCallHelper<API,std::pair<Ret,std::tuple<>>,false,true,true,false>::call<UGameplayTagsManager&(__cdecl *)(void),,>(Func &,puerts::v8_impl::API::CallbackInfoType,std::integer_sequence<size_t>)' being compiled
1> with
1> [
1> API=puerts::v8_impl::API,
1> Ret=UGameplayTagsManager &,
1> Func=UGameplayTagsManager &(__cdecl *)(void)
1> ]
1>D:\pw_cn_cn\trunk\Plugins\Puerts\Source\JsEnv\Public\StaticCall.hpp(844): note: see reference to function template instantiation 'bool puerts::internal::FuncCallHelper<API,std::pair<Ret,std::tuple<>>,false,true,true,false>::call<UGameplayTagsManager&(__cdecl *)(void),,>(Func &,puerts::v8_impl::API::CallbackInfoType,std::integer_sequence<size_t>)' being compiled
1> with
1> [
1> API=puerts::v8_impl::API,
1> Ret=UGameplayTagsManager &,
1> Func=UGameplayTagsManager &(__cdecl *)(void)
1> ]
1>D:\pw_cn_cn\trunk\Plugins\Puerts\Source\JsEnv\Public\StaticCall.hpp(945): note: see reference to function template instantiation 'bool puerts::internal::FuncCallHelper<API,std::pair<Ret,std::tuple<>>,false,true,true,false>::call<UGameplayTagsManager&(__cdecl *)(void),>(Func &&,puerts::v8_impl::API::CallbackInfoType)' being compiled
1> with
1> [
1> API=puerts::v8_impl::API,
1> Ret=UGameplayTagsManager &,
1> Func=UGameplayTagsManager &(__cdecl *)(void)
1> ]
1>D:\pw_cn_cn\trunk\Plugins\Puerts\Source\JsEnv\Public\StaticCall.hpp(948): note: see reference to function template instantiation 'bool puerts::internal::FuncCallHelper<API,std::pair<Ret,std::tuple<>>,false,true,true,false>::call<UGameplayTagsManager&(__cdecl *)(void),>(Func &&,puerts::v8_impl::API::CallbackInfoType)' being compiled
1> with
1> [
1> API=puerts::v8_impl::API,
1> Ret=UGameplayTagsManager &,
1> Func=UGameplayTagsManager &(__cdecl *)(void)
1> ]

问题重现 | Bug reproduce

puerts::DefineClass()
.Function("Get", MakeFunction(&UGameplayTagsManager::Get))
.Register();

#1258 已看到过这个报错,按这个在puerts1.0.5以下能成功绑定并使用,升级版本后有上述问题

经测试返回值是指针能 正常绑定,返回值是引用 就会有类似报错

是1.0.4没问题,1.0.5有问题?

1.0.5没问题,1.0.6.p1 有问题

这个修改引入的:f95a807

StaticCall已经用了最新的这份代码
FORCEINLINE static UGameplayTagsManager& Get()
绑定报错的是这样一个函数 ,同文件引入了