在我开始之前:
我有一个标题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
中使用此功能:
#include <tcf/services/breakpoints.h> // 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
的定义移到头文件中?我不想改变它,因为这是一个非常复杂的计划而且我不想打破它的'&#39;通过做这样的事情来设计。
我可能以错误的方式使用它,但如果我无法访问iterate_breakpoints()
,为什么我可以使用BreakpointInfo
功能进行访问?
我希望很清楚我在问什么。如果您需要帮助我,请告诉我。
最好的问候。
答案 0 :(得分:3)
我认为这是不可能的,因为在MyIterateBreakpointsCallBack
您尝试访问该类型的成员时,此时需要一个完整的类型。
我不熟悉您尝试使用的项目,但快速谷歌搜索暗示我的tcf.agent项目。如果这是真的,在快速查看breakpoints.h文件后,我注意到有一个get_breakpoint_attribute()
,它提供了一个名称/值对列表。也许这应该为您提供实施MyIterateBreakpointsCallBack()
。