Проблема системы ввода SFML
Поэтому я переносил игровой движок с SDL на SFML, и теперь у меня возникла проблема с моей системой ввода. Input.h
#ifndef BULLWHIP_INPUT_H
#define BULLWHIP_INPUT_H
#include
class bc_Input
{
public:
bool bm_KeyHit(sf::Key::Code key);
bool bm_KeyDown(sf::Key::Code key);
int bm_MouseX();
int bm_MouseY();
void bm_init(sf::RenderWindow app);
private:
sf::RenderWindow App;
const sf::Input& input;
};
#endif
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\bullwhip\lib\Bullwhip\/Input.h:15: ошибка: 'bc_Input::App' не может появляться в константном выражении C:\ C++ \ sdl \ bullwhip \ lib \ Bullwhip \ / Input.h: 15: ошибка: '.' не может появиться в константном выражении C:\ C++\sdl\bullwhip\lib\Bullwhip\/Input.h:15: ошибка: вызов функции не может появиться в константном выражении C:\ C++\sdl\bullwhip\lib\Bullwhip\/Input.h:15: ошибка: ISO C++ запрещает инициализацию элемента 'input' C:\ C++\sdl\bullwhip\lib\Bullwhip\/Input.h:15: error: сделать 'input' статическим C:\ C++\sdl\bullwhip\lib\Bullwhip\/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: ошибка: в этом контексте
1 ответ
Вы вызываете конструктор копирования здесь:
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();
}