繁体   English   中英

前向声明外部结构

[英]Forward-declaring an extern struct

在我开始之前:

  • 请注意我不想更改此处要介绍的主要设计。
  • 如果您认为此标题不合适,请随时更改标题
  • 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);

    // ..
}

但是Intelli-Sense告诉我:

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

所以问题是:

  • BreakpointInfo的定义移入头文件的情况下,是否有可能?

我不想更改它,因为它是一个非常复杂的程序,并且我不想通过这样做来破坏其设计。

可能我使用的方式有误,但是如果我无法访问BreakpointInfo为什么为什么会有ba iterate_breakpoints()函数可供我使用?

我希望我的要求很清楚。 如果您需要任何帮助,请告诉我。

最好的祝福。

我认为这是不可能的,因为您正在MyIterateBreakpointsCallBack尝试访问该类型的成员,并且这时需要一个完整的类型。

我对您要使用的项目不熟悉,但是谷歌的快速搜索提示我它是tcf.agent项目。 如果是这样,快速浏览一下breakpoints.h文件后,我注意到有一个get_breakpoint_attribute()可以为您提供名称/值对的列表。 也许应该为您提供实现MyIterateBreakpointsCallBack()所需的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM