【发布时间】:2020-12-03 15:57:36
【问题描述】:
我在一天中的大部分时间都被困在这个问题上。 我的目标是链接两个库。我只能接触到 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'
}
我想知道这个问题是否来自将 structA 定义为类型的 DepA.h... 我可以在我的包装器或 LibB 依赖项中写什么,他将 DepA.h 定义为 structA?
【问题讨论】:
-
您需要在您的
wrapper.c文件或wrapper.h中包含DepB.h。 -
哎呀我忘了把它放在我的计划中,它包含在我的实际项目中!我更新了图片!
-
您在任何地方都没有
struct structA。在structA的声明中需要一个结构标记。 -
DepA.h中有一个typedef:typedef struct {...} structA;
-
struct structA与structA不同。