gpt4 book ai didi

c++ - 创建 SDL_Window unique_ptr

转载 作者:行者123 更新时间:2023-11-30 02:17:46 24 4
gpt4 key购买 nike

对于我的游戏,我尝试在 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)

最佳答案

这里 _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())

关于c++ - 创建 SDL_Window unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53229095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com