2010-10-03 82 views
0

因此,我將我的遊戲引擎從SDL移植到SFML,現在我的輸入系統出現問題。 Input.hSFML輸入系統問題


#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:error:'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++禁止初始化成員'input' C:\ C++ \ sdl \ bullwhip \ lib \ Bullwhip \ /Input.h:15:error:使'input'爲static C:\ C++ \ SDL \牛鞭\ lib中\牛鞭\ /Input.h:15:錯誤:無效的一流的初始化非整體型的靜態數據成員 'SF ::輸入&'

使用c: \ program files(x86)\ codeblocks \ mingw \ bin ../ lib/gcc/mingw32/4.4.0 /../../../../ include/SFML/System/NonCopyable.hpp:57:error :'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對象的實際構造函數以及初始化列表。另外,如果你已經在更高的子系統中初始化一個sf :: RenderWindow(可能是這種情況),只需將你的成員變量App更改爲引用即可。

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