C ++错误中的游戏引擎SFML

时间:2017-07-31 15:57:24

标签: c++ game-engine sfml

这是用c ++构建的SFML的游戏引擎。我得到一些错误,我不知道如何解决它。如果有人可以解决这个问题,我会慷慨解囊。 我还在学习c,所以有人可以提出同样的问题或解决方案,但我只是从另一个页面复制代码而且我做的完全一样,我的代码也没有工作

错误:

zones

这是提供错误的代码。

State.h

Error C2065: 'StateSystem' : undeclared identifier

Error C2923: 'std::unique_ptr' : 'StateSystem' is not a valid template type 
argument for parameter '_Ty'

Error C3203: 'unique_ptr' : unspecialized class template can't be used as a 
template argument for template parameter '_Ty', expected a real type

Error C2512: 'std::unique_ptr' : no appropriate default constructor 
available

Error C2780: '_OutTy *std::move(_InIt,_InIt,_OutTy (&)[_OutSize])' : expects 
 3 arguments - 1 provided
1>          c:\program files (x86)\microsoft visual studio 
12.0\vc\include\xutility(2510) : see declaration of 'std::move'

Error C2893: Failed to specialize function template 
'remove_reference<_Ty>::type &&std::move(_Ty &&) throw()'
1>          With the following template arguments:
1>          '_Ty=Victor::StateRef &'


Error C2227: left of '->Resume' must point to class/struct/union/generic 
type
1>          type is 'int'

Error C2780: '_OutTy *std::move(_InIt,_InIt,_OutTy (&)[_OutSize])' : expects 
3 arguments - 1 provided
1>          c:\program files (x86)\microsoft visual studio 
12.0\vc\include\xutility(2510) : see declaration of 'std::move'


Error C2893: 
Failed to specialize function template 'remove_reference<_Ty>::type 
&&std::move(_Ty &&) throw()'
1>          With the following template arguments:
1>          '_Ty=Victor::StateRef &'


Error C2227: left of '->Initialize' must point to class/struct/union/generic 
type
1>          type is 'int'

Error C2440: 'return' : cannot convert from 'int' to 'Victor::StateRef &'

StateSystem.h

#pragma once


class State
{
public:
    virtual void Initialize() = 0;
    virtual void HandleInput() = 0;
    virtual void Update() = 0;
    virtual void Draw(float DeltaTime) = 0;

    virtual void Pause()
    {

    }
    virtual void Resume()
    {

    }
};

StateSystem.cpp

#pragma once

#include <memory>
#include <stack>
#include "State.h"

typedef std::unique_ptr <StateSystem> StateRef;

class StateSystem
{
public:
    StateSystem()
    {

    }

    ~StateSystem()
    {

    }



    void AddState(StateRef newStat, bool isReplacing = true);
    void RemoveState();
    void ProcessStateChanges();

    StateRef &GetActiveState();

private:

    std::stack<StateRef> _states;
    StateRef _newState;

    bool _isRemoving;
    bool _isAdding;
    bool _isReplacing;

};

2 个答案:

答案 0 :(得分:0)

StateSystem之前没有typedef std::unique_ptr <StateSystem> StateRef;只是在它之前添加class StateSystem

答案 1 :(得分:0)

它说无法找到StateSystem类。你必须先这样声明:

class StateSystem;
typedef std::unique_ptr <StateSystem> StateRef;
class StateSystem 
{
   //members
};

或将typedef放在StateSystem定义之后:

class StateSystem
{

   //members
};

typedef std::unique_ptr <StateSystem> StateRef;