首页 > 解决方案 > 在 C 中完成包装器的不完整类型

问题描述

我在一天的大部分时间里都停留在这个问题上。我的目标是链接两个库。我只能接触到 wrapper.c/.h 和 DepB.h 文件。我正在尝试使用由库 B 结构 (structB) 持有的结构 (structA) 之一来获取库 A。我知道我可以将 structA 作为 void* 存储在 structB 中,然后对其进行转换,但我想获得更性感的代码!

在此处输入图像描述

实际上,gcc 会为我返回 wrap() 的以下错误:

void wrap (structB* structBptr)
{
  structA structAinst;
  structBptr->structAptr = &structAinst;
  //  warning: assignment from incompatible pointer type
  
  funcA(structBptr->structAptr->someField);
  //  error: dereferencing pointer to incomplete type 'struct structA'
}

我想知道这个问题是否来自 DepA.h 将 structA 定义为一种类型......我可以在我的包装器或 LibB 依赖项中写什么,他将 DepA.h 定义为 structA?

标签: cwrappertypedef

解决方案


一个解决方案是创建一个包装器类型: 在此处输入图像描述

使用此解决方案,库 B 中仍然未知 structA。


推荐阅读