2010-10-03 5 views
0

Итак, я портировал свой игровой движок из SDL на SFML, и теперь у меня проблема с моей системой ввода. Input.hПроблема с системой ввода SFML


#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 \ кнут \ Lib \ Буллуип \ /Input.h: 15: ошибка: «bc_Input :: App» не может появляться в константном выражении C: \ C++ \ sdl \ bullwhip \ lib \ Bullwhip \ /Input.h: 15: error: '.' не может появиться в константном выражении C: \ C++ \ sdl \ bullwhip \ lib \ Bullwhip \ /Input.h: 15: ошибка: вызов функции не может появляться в константном выражении C: \ C++ \ sdl \ bullwhip \ lib \ Bullwhip \ /Input.h: 15: ошибка: ISO C++ запрещает инициализацию ввода-члена ' C: \ C++ \ sdl \ bullwhip \ lib \ Bullwhip \ /Input.h: 15: ошибка: создание «ввода» статического C: \ C++ \ SDL \ кнут \ Lib \ Буллуип \ /Input.h: 15: ошибка: недопустимый в классе инициализации статического элемента данных нецелочисленным типа 'НФ :: 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: ошибка: в этом контексте

ответ

0

вы называете конструктор копирования здесь:

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

Примечание один из ваших сообщений об ошибках:

error: 'sf::NonCopyable::NonCopyable(const sf::NonCopyable&) 

для того, чтобы избежать этой проблемы, вы должны используйте фактический конструктор для вашего sf :: Input object вместе с списком инициализации.

В качестве альтернативы, если вы уже инициализировали sf :: RenderWindow в более высокой подсистеме (как это, вероятно, так), простое изменение вашей переменной-члена в ссылке должно делать трюк.

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