【问题标题】:Create SDL_Window unique_ptr创建 SDL_Window unique_ptr
【发布时间】:2018-11-12 23:43:21
【问题描述】:

对于我的游戏,我正在尝试在SDL_GL_CreateContext(); 的帮助下使用unique_ptr 创建一个SDL_GLContext

我为我的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)

【问题讨论】:

  • 您好,我编辑了我的问题并意识到我在构造函数中的初始化程序有问题,但我不明白为什么会出现该错误,我编辑了问题

标签: c++ sdl-2 unique-ptr


【解决方案1】:

这里_window(nullptr, sdl_deleter) sdl_deleter 是一个类型名称,而需要一个对象。您应该提供一个实际的删除器对象,例如_window(nullptr, sdl_deleter{}) 或简单地将其默认构造为 unique_ptr 本身:_window(nullptr)

此外,SDL_GL_CreateContext 期望 SDL_Window *,而您正在使用 unique_ptr 喂它。你可能想要这个:SDL_GL_CreateContext(_window.get())

【讨论】:

    猜你喜欢
    • 2015-06-08
    • 1970-01-01
    • 2015-02-17
    • 2014-10-22
    • 2022-06-12
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多