【发布时间】:2019-09-22 21:02:33
【问题描述】:
我目前正在为我的游戏引擎制作一个 GUI 系统。我尝试使用std::make_shared() 为“GUImovingbar”组件之一创建共享指针,但编译时出现以下错误
'std::shared_ptr<_other> std::make_shared(_Types &&...)': 无法从'initializer list'推导出'_Types &&...'的模板参数
但是,当我使用完全相同的输入创建一个新指针时,它编译得很好,没有错误。这让我觉得有点奇怪。我在这里错过了什么?
使用std::make_shared()的代码:
this->playerhullbar = std::make_shared<GUImovingbar>(
"right",
{ 50,hully }, //scoords
globalguitextures[findStringSrdPointerPairVectElement(globalguitextures, "barbackground")].second,
{ 0,static_cast<double>(maxplayerhullint),static_cast<double>(maxplayerhullint) },
{ 50,hully,250, hully,2,100 },//for int vector input ("bsbebdbc"): 1 barxstart, 2 y , 3 barendx, 4 y, 5 distance between bars in px, 6 bar count
{ 0,255,0 },
bartextvect
);
以上导致错误:
'std::shared_ptr<_other> std::make_shared(_Types &&...)': 无法从'initializer list'推导出'_Types &&...'的模板参数
以下根本不会导致错误:
std::shared_ptr<GUImovingbar> newptr(new GUImovingbar(
"right",
{ 50,hully}, //scoords
globalguitextures[findStringSrdPointerPairVectElement(globalguitextures, "barbackground")].second,
{ 0,static_cast<double>(maxplayerhullint),static_cast<double>(maxplayerhullint) },
{ 50,hully,250, hully,2,100 },//for int vector input ("bsbebdbc"): 1 barxstart, 2 y , 3 barendx, 4 y, 5 distance between bars in px, 6 bar count
{ 0,255,0 },
bartextvect)
);
this->playerhullbar = newptr;
【问题讨论】:
-
我不认为你想要这里的“makefile”标签。这似乎根本与 makefile 无关。
-
GUImovingbar有定义的构造函数吗?std::make_shared不适用于聚合初始化 iirc。 -
@Yksisarvinen 是的 GUImovingbar 有一个定义的构造函数