将std :: stack用于游戏状态机。错误C2664

时间:2018-10-29 05:23:55

标签: c++

因此,我试图使用Indi在this code review中发布的std :: stack创建状态机。我仍在学习C ++,所以一开始我就不用理会它,因为它对我来说简直是胡言乱语。但是,既然我认为我至少了解它如何工作的基本概念,我想尝试开始实施它。我的游戏文件中的状态更加复杂,但是我相信这可以说明我遇到的问题。

#include <memory>
#include <iostream>
#include <string>
#include <stack>
#include <vector>

class state
{
public:

    state() = default;
    virtual ~state() = default;

    virtual void input() = 0;
    virtual void update() = 0;
    virtual void render() = 0;

    state(state const&) = delete;
    auto operator=(state const&) = delete;
};

class TitleState : public state
{
public:
    TitleState();

    void input() override;
    void update() override;
    void render() override;

private:
    int number_;
};

void TitleState::input()
{
    std::cout << "Enter a number";
    std::cin >> number_;
}

void TitleState::update(){return;}

void TitleState::render()
{
    std::cout << number_;
}

int main(int argc, char* args[])
{
    auto stateStack = std::stack<std::unique_ptr<state>>{};
    stateStack.push(new TitleState{});
    stateStack.top()->input();
    stateStack.top()->render();

    return 0;
}

在第51行。stateStack.push(new TitleState{}); 我收到一个错误;

1>c:\coding\project1\main.cpp(51): error C2664: 'void std::stack<std::unique_ptr<state,std::default_delete<_Ty>>,std::deque<std::unique_ptr<_Ty,std::default_delete<_Ty>>,std::allocator<std::unique_ptr<_Ty,std::default_delete<_Ty>>>>>::push(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': cannot convert argument 1 from 'TitleState *' to 'std::unique_ptr<state,std::default_delete<_Ty>> &&'
1>        with
1>        [
1>            _Ty=state
1>        ]
1>c:\coding\project1\main.cpp(51): note: Reason: cannot convert from 'TitleState *' to 'std::unique_ptr<state,std::default_delete<_Ty>>'
1>        with
1>        [
1>            _Ty=state
1>        ]
1>c:\coding\project1\main.cpp(51): note: Constructor for class 'std::unique_ptr<state,std::default_delete<_Ty>>' is declared 'explicit'
1>        with
1>        [
1>            _Ty=state
1>        ]

我一直在努力进行数小时的工作,但还没有弄清楚。我尝试浏览与我的错误相同的问题。我尝试将unique_ptr更改为TitleState,而不只是state。我尝试使用向量而不是堆栈。

我确定这很简单,因为我经验不足,无法发现,但是我尝试过的任何方法似乎都无效。

0 个答案:

没有答案