Input 输入系统问题

Input 输入系统问题,input,reference,constants,sfml,noncopyable,Input,Reference,Constants,Sfml,Noncopyable,所以我把我的游戏引擎从SDL移植到SFML,现在我的输入系统出现了问题。 输入.h Input.cpp #include "Input.h" bool bc_Input::bm_KeyDown(sf::Key::Code key) { return in.IsKeyDown(key) } bool bc_Input::bm_KeyHit(sf::Key::Code key) { sf::Event event; while(App.GetEvent(event) &

所以我把我的游戏引擎从SDL移植到SFML,现在我的输入系统出现了问题。 输入.h

Input.cpp


#include "Input.h"

bool bc_Input::bm_KeyDown(sf::Key::Code key)
{
    return in.IsKeyDown(key)
}

bool bc_Input::bm_KeyHit(sf::Key::Code key)
{
    sf::Event event;
    while(App.GetEvent(event) && event.Type == sf::Event::KeyPressed)
    {
        switch(event.Key.Code)
        {
            case key: return true; break;
            default:
                break;
        }
    }

}

void bc_Input::bm_init(sf::RenderWindow app)
{
    App = app;
    in = App.GetInput();
}

int bc_Input::bm_MouseX()
{
    return in.GetMouseX();
}

int bc_Input::bm_MouseY()
{
    return in.GetMouseY();
}
我从中得到以下错误:

C:\C++\sdl\Bullswip\lib\Bullswip\/Input.h:15:错误:“bc\u Input::App”不能出现在常量表达式中 C:\C++\sdl\Bullswip\lib\Bullswip\/Input.h:15:错误:'.'不能出现在常量表达式中 C:\C++\sdl\Bullswip\lib\Bullswip\/Input.h:15:错误:函数调用不能出现在常量表达式中 C++:\C++ +SDL \牛鞭\ LIB \ BLLWHIW/\NET: 15:错误:ISO C++禁止成员输入的初始化 C:\C++\sdl\bullwhip\lib\bullwhip\/Input.h:15:错误:使“Input”为静态 C:\C++\sdl\Bullswip\lib\Bullswip\/Input.h:15:错误:非整数类型“sf::Input&”的静态数据成员的类内初始化无效

c:\program files(x86)\codeblocks\mingw\bin../lib/gcc/mingw32/4.4.0/../../../../../../../include/SFML/System/NonCopyable.hpp:57:错误:“sf::NonCopyable::NonCopyable(const sf::NonCopyable&)”是私有的
c:\program files(x86)\codeblocks\mingw\bin../lib/gcc/mingw32/4.4.0/../../../../../../../include/SFML/Window/Window.hpp:56:错误:在此上下文中

您在此处调用复制构造函数:

void bc_Input::bm_init(sf::RenderWindow app)
{
    App = app;
    in = App.GetInput();
}
请注意其中一条错误消息:

error: 'sf::NonCopyable::NonCopyable(const sf::NonCopyable&)
为了避免这个问题,您应该为sf::Input对象使用一个实际的构造函数以及一个初始化列表

或者,如果您已经在更高的子系统中初始化了sf::RenderWindow(很可能是这种情况),只需将您的成员变量App更改为引用即可

//header
sf::RenderWindow& App;
...
//source
void bc_Input::bm_init(sf::RenderWindow& app)
{
    App = app;
    in = App.GetInput();
} 
//header
sf::RenderWindow& App;
...
//source
void bc_Input::bm_init(sf::RenderWindow& app)
{
    App = app;
    in = App.GetInput();
}