【问题标题】:Game Engine SFML in C++ ErrorsC++ 错误中的游戏引擎 SFML
【发布时间】:2018-01-07 07:03:26
【问题描述】:

这是一个用 c++ 构建的 SFML 游戏引擎。我收到一些我不知道如何解决的错误。如果有人能解决这个问题,我会非常感激。 我还在学习 c,所以有人可能会遇到同样的问题或解决方案,但我只是从另一个页面复制代码,我做的完全一样,我的代码不起作用

错误:

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 &'

这是提供错误的代码。

状态.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.h

#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;

};

StateSystem.cpp

#include "StateSystem.h"


void StateSystem::AddState(StateRef newState, bool isRepalcing)
{
    this->_isAdding = true;
    this->_isReplacing = isRepalcing;

    this->_newState = std::move(newState);

}

void StateSystem::RemoveState()
{
    this->_isRemoving = true;
}
void StateSystem::ProcessStateChanges()
{
    if (this->_isRemoving && !this->_states.empty())
    {
        this->_states.pop();

        if (!this->_states.empty())
        {
            this->_states.top()->Resume();

        }

        this->_isRemoving = false;
    }



    if (this->_isAdding)
    {
        if (!this->_states.empty())
        {
            if (this->_isReplacing)
            {
                this->_states.pop();
            }
            else
            {
                this->_states.top()->Pause();
            }
        }

        this->_states.push(std::move(this->_newState));
        this->_states.top()->Initialize();
        this->_isAdding = false;

    }

}

StateRef &StateSystem::GetActiveState()
{
    return this->_states.top();
}

【问题讨论】:

    标签: c++ game-engine sfml


    【解决方案1】:

    typedef std::unique_ptr &lt;StateSystem&gt; StateRef; 之前没有StateSystem,只需在其前面添加class StateSystem

    【讨论】:

      【解决方案2】:

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

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

      或将typedef 放在StateSystem 定义之后,如下所示:

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

      【讨论】:

        猜你喜欢
        • 2016-02-26
        • 2013-01-17
        • 2021-01-26
        • 2022-01-12
        • 2015-08-13
        • 1970-01-01
        • 2021-08-15
        • 1970-01-01
        • 2017-03-31
        相关资源
        最近更新 更多