因此,我试图使用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
。我尝试使用向量而不是堆栈。
我确定这很简单,因为我经验不足,无法发现,但是我尝试过的任何方法似乎都无效。