У меня проблема со стекю общих указателей.C++ - как нажимать объекты на std :: stack из std :: shared_ptr?
GameState.hpp:
class GameState : std::enable_shared_from_this<GameState>
{
public:
virtual void update(float delta) = 0;
virtual void render() = 0;
virtual void handleInput() = 0;
protected:
Game* mGame;
StatesManager.hpp:
class StatesManager
{
public:
StatesManager();
~StatesManager();
void pushState(std::shared_ptr<GameState> state);
void changeState(std::shared_ptr<GameState> state);
void popState();
std::shared_ptr<GameState> peekState();
private:
std::stack<std::shared_ptr<GameState> > mStates;
};
Вот как я пытаюсь нажать:
statesManager.pushState(new StateSplash(this));
Но это дает мне эту ошибку:
no suitable constructor exists to convert from "StateSplash *" to "std::shared_ptr<GameState>"
Каков правильный способ нажатия объекта на std :: stack из std :: shared_ptrs? Я хочу использовать их, потому что он предоставляет «сборщик мусора», который мне нужен, потому что, если я поплю элемент из стека, когда объект является C-подобным указателем, он не вызывает деструктор.
'statesManager.pushState (станд :: shared_ptr (новый StateSplash (это)));' –
@IgorTandetnik Вы должны отправить ответ и объяснить, почему * explicit * ly;), а не комментарий. – vsoftco