我试图在C ++中使用unique_ptr指向一个结构。 struct的定义对于初始化程序是未知的。包含结构的头文件包含一个函数来检索结构的大小,结构是通过create(void* memory)
调用构造和返回的,其中memory
指向一个适当大小的数据块
使用下面的示例代码初始化此unique_ptr(修复此错误后将添加malloc成功检查),导致编译时错误:error: invalid application of ‘sizeof’ to incomplete type ‘OlmAccount’
,因为代码无法访问结构定义。
是否可以为唯一指针指定结构的大小,以有效地“覆盖”该结构的sizeof并解决此错误?
导致此问题的示例:
std::unique_ptr<OlmAccount>(static_cast<OlmAccount *>(olm_account(malloc(olm_account_size()))));
编辑: 类似的问题与指定删除者有关并且由其来修复。但是,当此代码适用于使用shared_ptr(定义为使用不完整的删除器正确编译)时,会抛出相同类型的大小错误:
error: invalid application of ‘sizeof’ to incomplete type ‘OlmAccount’
static_assert( sizeof(_Yp) > 0, "incomplete type" );
答案 0 :(得分:0)