- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我目前在将 SDL_Window 指针存储为 std::unique_ptr 时遇到问题。
我尝试的是:
std::unique_ptr<SDL_Window> window_;
解决方法:
std::unique_ptr<SDL_Window, void(*)(SDL_Window*)> window_;
第一次尝试一直在内存头中抛出错误,说 SDL_Window 是一个不完整的类型。好吧,我知道 SDL_Window 是一个结构,不能实例化
SDL_Window* window_ = new SDL_Window();
因此实例化是通过 SDL_CreateWindow(params) 完成的。
问题是:
为什么我不能为 SDL_Window 调用默认构造函数(或任何其他构造函数)?
为什么 unique_ptr 在这种情况下需要删除器,而在这里却不需要:
renderSystem_ = std::unique_ptr<Renderer::RenderSystem>(new Renderer::RenderSystem());
RenderSystem 是一个只有默认构造函数、析构函数的类。
是不是因为 unique_ptr 可以访问析构函数,析构函数充当删除器,不需要作为模板参数出现?
最佳答案
正如编译器所说,SDL_Window
类型是不完整的。
SDL 库使用 C 语言中的通用模式:指向不完整类型的指针。
在您创建唯一指针时,SDL_Window
类型在编译器看来是这样的:
struct SDL_Window;
这是创建不完整类型的一种方式。
编译器只知道 SDL_Window
是一种类型,而不是全局变量或函数。这也意味着它不能假设它有多大,它不能假设它有任何构造函数或析构函数。
至于指向SDL_Window
的唯一指针,另一种方法是使用它:
struct SDLWindowDestroyer
{
void operator()(SDL_Window* w) const
{
SDL_DestroyWindow(w);
}
};
std::unique_ptr<SDL_Window, SDLWindowDestroyer> window_;
现在您不需要在构造函数中为 window_
关于c++ - 关于 SDL_Window 和 unique_ptr 的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29424877/
我试图在一个函数中初始化一个 SDL_Window,但它总是失败,除非我定义 SDL_Window*win;作为全局变量。这是代码: #include #include #define SCREEN_
我正在为学校开发一个小程序。它包括一个 3D 犯罪现场(我使用 OpenGL 来显示它)、一些说明和一个主菜单。但是,我面临着一个非常不受欢迎的问题。 我遇到的问题如下:当我运行程序时,它具有所需的窗
我正在做一个关于 SDL 的教程,我遇到了一些问题我刚刚做了 this我在那里做一些基本的事情来让 SDL 运行。然后我运行了测试代码(在该页面上)并且它起作用了。但是,现在我正在尝试运行代码 her
我正在使用 GNU/Linux、C++、SDL 1.3我正在尝试为“窗口”类编写代码。 #ifndef WINDOW_H #define WINDOW_H #include "SDL/SDL.h" #
对于我的游戏,我尝试在 SDL_GL_CreateContext(); 的帮助下使用 unique_ptr 创建一个 SDL_GLContext 我为我的 unique_ptr 创建了一个自定义删除器
我正在将一款使用 SDL 1.2 的 C++ 游戏移植到 SDL2 和 Android 平台。到目前为止一切顺利,除了一件事:当我尝试访问 SDL_Window 的字段时,编译器告诉我 error:
我从 SDL2 开始,在尝试将 SDL_renderer 转换为 SDL_window 时遇到了一些问题。如何准确地将 SDL_rnderer 转换为 SDL_window? 最佳答案 你不能,它们是
运行以下代码,我无法查看窗口,除非我在 SDL_CreateWindow 中设置了 SDL_WINDOW_FULLSCREEN。使用任何其他设置,我可以看到进程正在运行,但没有出现窗口。我希望能够创建
创建指向 SDL_Window 结构的指针并将其分配给 shared_ptr,会导致上述错误。 部分类(class): #include class Application { static
我在尝试将 SDL_FillRect 与 SDL 2.0 结合使用时遇到问题 这是我的代码: bool running = true; //Initialise SDL SDL_Init(SDL_IN
我目前在将 SDL_Window 指针存储为 std::unique_ptr 时遇到问题。 我尝试的是: std::unique_ptr window_; 解决方法: std::unique_ptr
我正在尝试使用 FFMPEG(Fetching,decode.etc) 播放网络流,并尝试使用 SDL 渲染它。 当我运行我的应用程序时,它会正常启动,但只要我调用 OpenFile()其中包含用于打
我正在尝试在带有 SDL_Window 的 cpp 中使用 unique_ptr,但它是一个不完整的类型,在我尝试编译代码时遇到第一个错误后,我创建了我的自己的删除器结构,但它仍然无法正常工作,所以这
如果您使用 SDL_SetVideoMode() 创建窗口,您将返回一个表面,而不是窗口句柄。有没有办法获得 SDL_Window 句柄?我知道有一个 SDL_GetWindowFromID 函数,但
我使用 C++ 有一段时间了,最近才开始接触 SDL 和 SDL2。 我能够得到 dot demo program去工作。 但是其他程序,比如Lazy Foo' Productions's复制和粘
我为 SDL2 库方法创建了包装仿函数,以返回带有自定义删除器的智能指针。它似乎适用于 unqiue_ptr(类 Image),但对于在构建期间返回 shared_ptr(类 Window)的类给出以
我是一名优秀的程序员,十分优秀!