2015-10-07 3 views
1

Этот маленький фрагмент дает мне некоторые неприятности. Я просто не могу понять, что случилось с ним:Возникли проблемы с list.push_back и 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>>> 

Ошибка дается от компилятора:

Нет Constructer Соответствует списку аргументов.

ответ

3

Вы пытаетесь инициализировать std::shared_ptr<std::pair<X, Y>> с помощью std::make_pair. Это похоже на инициализацию 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 
) 
); 
1

Вы передаете возвращение 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 
    ) 
); 
Смежные вопросы