我遇到了堆栈共享指针的问题。
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 of std :: shared_ptrs的正确方法是什么? 我想使用它们,因为它提供了我需要的&#34;垃圾收集器&#34;,因为如果我在堆栈中弹出元素,当对象是类C指针时,它不会调用析构函数。
答案 0 :(得分:3)
假设StateSplash
是GameState
的孩子。
您的方法接受std::shared_ptr
并尝试将正常指针传递给它。您的编译器不知道如何从StateSplash *
到std::shared_ptr<GameStage>
。
您必须通过
构建std::shared_ptr
statesManager.pushState(std::make_shared<GameState>(this));
或
statesManager.pushState(std::shared_ptr<GameState>(new StateSplash(this)));