gpt4 book ai didi

c++ - 来自库的不完整类型的 shared_ptr

转载 作者:太空狗 更新时间:2023-10-29 20:26:58 24 4
gpt4 key购买 nike

我的问题很简单:我正在使用 SDL 创建一个简单的模拟,我想将 TTF_Font 类型的实例存储在智能指针 (shared_ptr) 中,但我不断收到此错误:

“‘sizeof’对不完整类型‘_TTF_Font’的无效应用”

有没有办法在不将它们的源代码合并到我的程序中的情况下使用具有来自外部库的不完整类型的智能指针?

编辑:

TTF_Font 声明为

typedef struct _TTF_Font TTF_Font;

_TTF_Font 又在编译的外部库中定义。

我对 TTF_Font 的使用只是构造一个新的堆栈分配的 shared_ptr 实例,并带有指向 TTF_Font 的原始指针:

auto font_sp = std::shared_ptr<TTF_Font>(font_p);

我没有在这里明确使用 sizeof

最佳答案

通常有一个不完整类型的 shared_ptr 应该可以。你可以像这样声明一个函数

typedef struct _TTF_Font TTF_Font;
std::shared_ptr<TTF_Font> makeFont();

在头文件中没有问题。 makeFont() 的实现需要查看类 TTF_Font 的完整定义。因此,在实现文件中,您需要包含定义 TTF_Font 类的文件。如果您想隐藏此实现细节,您可以考虑将 makeFont() 放入您包含在项目中的库中。这样您的项目就不需要包含定义 TTF_Font 的头文件,除非您出于其他原因想要访问此类的成员。

关于您的编辑:

当您从指针创建 shared_ptr 时,shared_ptr 将在内部存储如何删除该对象。为此,shared_ptr 需要查看指向的类型的析构函数。因此,即使没有调用构造函数,shared_ptr 也需要查看结构定义。

关于c++ - 来自库的不完整类型的 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17649882/

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