【发布时间】:2016-08-12 14:19:47
【问题描述】:
我正在使用 SDL2 和 C++ 制作一个基本游戏。我一直在慢慢将我对原始指针的不良使用改变为更安全的智能指针。
_window 变量是一个私有类成员:
private:
std::shared_ptr<SDL_Window> _window;
以下代码有效:
_window = std::shared_ptr<SDL_Window>(SDL_CreateWindow(
"Game",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH,
SCREEN_HEIGHT,
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE
));
以下代码不起作用:
_window = std::make_shared<SDL_Window>(SDL_CreateWindow(
"Game",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH,
SCREEN_HEIGHT,
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE
));
抛出以下错误:
C:\...\include\type_traits(984): error C2027: use of undefined type 'SDL_Window'
这很令人困惑,因为type_traits 是标准库的一部分。因此,我不确定错误的根源在哪里,但是在这里包含我的整个项目是不可行的。
仅将std::shared_ptr 更改为std::make_shared 会导致抛出此类错误的原因是什么?
【问题讨论】:
-
两者都不起作用,因为您必须提供自定义删除器。
-
我有什么特别的方法吗?
-
@Ashley: "这很令人困惑,因为 type_traits 是标准库的一部分。" 仅仅因为错误的位置在标准库中确实如此not 表示它是该错误的来源。就像你给一个函数传递一个 NULL 指针一样,即使是你的代码做错了,也会在那个函数中访问 NULL 指针。
标签: c++ c++11 pointers sdl smart-pointers