Создать SDL_Window unique_ptr - PullRequest
       7

Создать SDL_Window unique_ptr

0 голосов
/ 09 ноября 2018

Для своей игры я пытаюсь создать SDL_GLContext, используя unique_ptr с помощью SDL_GL_CreateContext();

Я создал собственный удалитель для моего unique_ptr

struct sdl_deleter
{
    void operator()(SDL_Window *p) const { SDL_DestroyWindow(p); }
    void operator()(SDL_Renderer *p) const { SDL_DestroyRenderer(p); }
    void operator()(SDL_Texture *p) const { SDL_DestroyTexture(p); }
};

class MainGame{
    std::unique_ptr<SDL_Window, sdl_deleter> _window;

public: 
    run();
}





MainGame::MainGame() : _window(nullptr, sdl_deleter), _screenWidth(1024), _screenHeight(768), _gameState(GameState::PLAY)
{

}

void MainGame::run(){
        SDL_Init(SDL_INIT_EVERYTHING);
        _window.reset(SDL_CreateWindow("Game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, _screenWidth, _screenHeight, SDL_WINDOW_OPENGL));
}

Я получаю сообщение о том, что тип недопустим, и я не знаю, как его обойти.

Error   C2664   'std::unique_ptr<SDL_Window,sdl_deleter>::unique_ptr(const std::unique_ptr<SDL_Window,sdl_deleter> &)': cannot convert argument 2 from 'void (__cdecl *)(SDL_Window *)' to 'const _Dx &'

Ошибка при инициализации указателя:

: _window(nullptr, sdl_deleter)

1 Ответ

0 голосов
/ 09 ноября 2018

Здесь _window(nullptr, sdl_deleter) sdl_deleter - это имя типа, в то время как объект ожидается.Вы должны либо предоставить фактический объект удаления, например, _window(nullptr, sdl_deleter{}), либо просто оставить его созданным по умолчанию с помощью unique_ptr: _window(nullptr).

Furthemore, SDL_GL_CreateContext ожидает SDL_Window *, пока выкормить его unique_ptr.Вы, вероятно, хотите это: SDL_GL_CreateContext(_window.get()).

...