将SDL_Cursor与unique_ptr结合使用:不允许错误类型不完整

时间:2018-07-26 13:19:25

标签: c++ sdl unique-ptr handle

我正在尝试创建类型为unique_ptr的{​​{1}},但是由于SDL_Cursor的定义在SDL的.dll文件之一之内而无法执行。

SDL_Cursor结构已声明但未在SDL_mouse.h中定义:

SDL_Cursor

所以我不断收到错误消息:

  

不允许使用E0070不完整的类型

     

使用未定义类型'SDL_Cursor'

是否有任何方法可以从.dll文件中提取typedef struct SDL_Cursor SDL_Cursor; 的定义来避免此错误?

这是我尝试过的:

SDL_Cursor

我知道我也将为#include <memory> #include "SDL.h" SDL_Cursor* p = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW); - How it is usually created SDL_Cursor* p = new SDL_Cursor(); - Undefined type error. std::unique_ptr<SDL_Cursor> unique = std::unique_ptr<SDL_Cursor>(new SDL_Cursor()); - Undefined type error. 提供一个自定义删除器(SDL_FreeCursor),但是由于此错误,即使这样目前也无法正常工作。

如何获得unique_ptr的定义?

1 个答案:

答案 0 :(得分:2)

有很多原因使您真正不想获取SDL隐藏的类型。即使您知道了这一点,它也可能在将来的SDL版本中发生变化,即使在这种情况下,new ing游标也无法实现。在任何情况下,请使用SDL创建/销毁功能,例如:

std::unique_ptr<SDL_Cursor, decltype(&SDL_FreeCursor)> p = {SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW), SDL_FreeCursor};