list.push_back 和 std::shared_ptr 有问题
Having trouble with list.push_back and std::shared_ptr
这个小片段给我带来了一些麻烦。我只是不知道它有什么问题:
m_buttons.push_back(
std::shared_ptr<std::pair<std::shared_ptr<ShinyButton>, BUTTONTYPE>>(
std::make_pair(
std::shared_ptr<ShinyButton>(new ShinyButton(0, 0, 0, 0, "menue_1", "menue_1_glow", 55, 55, 7, 7)),
START
)
)
);
列表定义如下:
std::list<std::shared_ptr<std::pair<std::shared_ptr<ShinyButton>,BUTTONTYPE>>>
编译器给出的错误是:
No constructer matches Argument list.
您正在尝试用 std::make_pair
初始化 std::shared_ptr<std::pair<X, Y>>
。这就像用 int
初始化 int *
。也许你打算使用 make_shared
:
m_buttons.push_back(
std::make_shared<std::pair<std::shared_ptr<ShinyButton>, BUTTONTYPE>>(
std::make_pair(
std::shared_ptr<ShinyButton>(new ShinyButton(0, 0, 0, 0, "menue_1", "menue_1_glow", 55, 55, 7, 7)),
START
)
)
);
事实上,使用 make_shared
,您甚至不需要 make_pair
调用:
m_buttons.push_back(
std::make_shared<std::pair<std::shared_ptr<ShinyButton>, BUTTONTYPE>>(
std::shared_ptr<ShinyButton>(new ShinyButton(0, 0, 0, 0, "menue_1", "menue_1_glow", 55, 55, 7, 7)),
START
)
);
您传递的 return make_pair
是 pair
而不是 pair*
。您可以使用:
std::make_shared<std::pair<std::shared_ptr<ShinyButton>,BUTTONTYPE>>(
std::make_pair(
std::make_shared<ShinyButton>(0, 0, 0, 0, "menue_1", "menue_1_glow", 55, 55, 7, 7), START
)
);
这个小片段给我带来了一些麻烦。我只是不知道它有什么问题:
m_buttons.push_back(
std::shared_ptr<std::pair<std::shared_ptr<ShinyButton>, BUTTONTYPE>>(
std::make_pair(
std::shared_ptr<ShinyButton>(new ShinyButton(0, 0, 0, 0, "menue_1", "menue_1_glow", 55, 55, 7, 7)),
START
)
)
);
列表定义如下:
std::list<std::shared_ptr<std::pair<std::shared_ptr<ShinyButton>,BUTTONTYPE>>>
编译器给出的错误是:
No constructer matches Argument list.
您正在尝试用 std::make_pair
初始化 std::shared_ptr<std::pair<X, Y>>
。这就像用 int
初始化 int *
。也许你打算使用 make_shared
:
m_buttons.push_back(
std::make_shared<std::pair<std::shared_ptr<ShinyButton>, BUTTONTYPE>>(
std::make_pair(
std::shared_ptr<ShinyButton>(new ShinyButton(0, 0, 0, 0, "menue_1", "menue_1_glow", 55, 55, 7, 7)),
START
)
)
);
事实上,使用 make_shared
,您甚至不需要 make_pair
调用:
m_buttons.push_back(
std::make_shared<std::pair<std::shared_ptr<ShinyButton>, BUTTONTYPE>>(
std::shared_ptr<ShinyButton>(new ShinyButton(0, 0, 0, 0, "menue_1", "menue_1_glow", 55, 55, 7, 7)),
START
)
);
您传递的 return make_pair
是 pair
而不是 pair*
。您可以使用:
std::make_shared<std::pair<std::shared_ptr<ShinyButton>,BUTTONTYPE>>(
std::make_pair(
std::make_shared<ShinyButton>(0, 0, 0, 0, "menue_1", "menue_1_glow", 55, 55, 7, 7), START
)
);