向前声明外部结构

Forward-declaring an extern struct

本文关键字:结构 外部 声明      更新时间:2023-10-16

在我开始之前:

  • 请注意 我不想要来改变我在这里向你们展示的主要设计。
  • 如果你认为这个标题不合适,可以随意更改
  • 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中使用这个功能:

#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);
    // ..
}

但是智能感官告诉我:

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

所以问题是:

  • 是甚至可能的没有移动BreakpointInfo的定义到头文件?

我不想改变它,因为它是一个相当复杂的程序,我不想做这样的事情来破坏它的设计。

这可能是我使用它的错误方式,但为什么会有一个iterate_breakpoints()功能可供我访问,如果我不能访问BreakpointInfo ?

我希望你明白我在问什么。如果你需要什么帮助,请告诉我。

问好。

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

我不熟悉的项目,你试图与工作,但一个快速的谷歌搜索暗示我它的tcf。代理项目。如果这是真的,在breakpoints.h文件中快速查看之后,我注意到有一个get_breakpoint_attribute(),它为您提供了一个名称/值对列表。也许这应该给你的信息,你需要实现你的MyIterateBreakpointsCallBack()