正向声明一个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()
所需的信息。