Проблема системы ввода SFML - PullRequest
       21

Проблема системы ввода SFML

0 голосов
/ 03 октября 2010

Итак, я переносил игровой движок с 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: ошибка: статический ввод данных 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 Ответ

0 голосов
/ 09 апреля 2011

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

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