2010-10-03 5 views
0

Je portais donc mon moteur de jeu de SDL à SFML, et maintenant j'ai un problème avec mon système de saisie. Input.hSFML Problème de système d'entrée


#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(); 
} 

je reçois ces erreurs de ceci:

C: \ C++ \ sdl \ bullwhip \ lib \ Bullwhip \ /Input.h: 15: erreur: 'bc_Input :: App' ne peut pas apparaître dans une expression constante C: \ C++ \ sdl \ bullwhip \ lib \ Bullwhip \ /Input.h: 15: erreur: '.' ne peut pas apparaître dans une expression constante C: \ C++ \ sdl \ bullwhip \ lib \ Bullwhip \ /Input.h: 15: erreur: un appel de fonction ne peut pas apparaître dans une expression constante C: \ C++ \ sdl \ bullwhip \ lib \ Bullwhip \ /Input.h: 15: erreur: ISO C++ interdit l'initialisation du membre 'entrée' C: \ C++ \ sdl \ bullwhip \ lib \ Bullwhip \ /Input.h: 15: erreur: rendant 'entrée' statique C: \ C++ \ SDL \ bullwhip \ lib \ bullwhip \ /Input.h: 15: erreur: initialisation non valide dans la classe de l'élément de données statique de type non-intégral 'sf :: Input &'

c: \ program files (x86) \ blocs de code \ mingw \ bin ../lib/gcc/mingw32/ 4.4.0 /../../../../ include/SFML/System/NonCopyable.hpp: 57: erreur : 'sf :: NonCopyable :: NonCopyable (const sf :: NonCopyable &)' est privé c: \ fichiers de programme (x86) \ codesblocs \ mingw \ bin ../lib/gcc/mingw32/ 4.4.0 /../../../../ include/SFML/Window/Window.hpp: 56: erreur: dans ce contexte

Répondre

0

vous appelez le constructeur de copie ici:

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

Remarque un de vos messages d'erreur:

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

pour éviter ce problème, vous devriez utilisez un constructeur réel pour votre objet sf :: Input avec une liste d'initialisation. Alternativement, si vous avez déjà initialisé un sf :: RenderWindow dans un sous-système supérieur (comme c'est probablement le cas), il suffit de changer votre variable membre App en référence pour faire l'affaire.

Questions connexes