正向声明一个extern结构

在我开始之前:

  • 请注意我不想改变我在这里展示的主要设计。
  • 如果您认为这个不适合,请随意更改标题
  • C ++标签在这里,因为解决方案也应该是等效的

我有一个标题breakpoints.h ,它声明:

 typedef struct BreakpointInfo BreakpointInfo; /* * Iterate all breakpoints known to the Breakpoints service, * including breakpoints that are created by other (remote) clients. */ typedef void IterateBreakpointsCallBack(BreakpointInfo *, void *); extern void iterate_breakpoints(IterateBreakpointsCallBack * callback, void * args); 

和相应的breakpoints.c定义:

 struct BreakpointInfo { Context * ctx; LINK link_all; /* * A lot of members .. */ LINK link_hit_count; }; 

现在我想在另一个文件context.c使用这个functionallity:

 #include  // The header file extern BreakpointInfo; //extern struct BreakpointInfo; // Also did not work void MyIterateBreakpointsCallBack(/* struct */ BreakpointInfo *bpInfo, void *args) { bpInfo->file; } void thread_function() { // .. iterate_breakpoints(&MyIterateBreakpointsCallBack, 0); // .. } 

但Intelli-Sense告诉我:

 BreakpointInfo *bpInfo, Error: pointer to incomplete class type is not allowed. 

所以问题是:

  • 如果BreakpointInfo的定义移动到头文件中,这是否可行?

我不想改变它,因为它是一个非常复杂的程序,我不想通过做这些事情打破它的’设计。

有可能我以错误的方式使用它,但是如果我无法访问BreakpointInfo为什么我可以访问一个iterate_breakpoints()函数?

我希望很清楚我在问什么。 如果您需要帮助我,请告诉我。

最好的祝福。

我不认为这是可能的,因为在MyIterateBreakpointsCallBack你试图访问该类型的成员,这需要一个完整的类型。

我不熟悉您正在尝试使用的项目,但快速谷歌搜索暗示我的tcf.agent项目。 如果这是真的,在快速查看breakpoints.h文件后,我注意到有一个get_breakpoint_attribute() ,它给出了一个名称/值对列表。 也许这应该为您提供实现MyIterateBreakpointsCallBack()所需的信息。