正向声明一个extern结构

时间:2014-05-07 14:39:07

标签: c++ c visual-studio-2010 intellisense

在我开始之前:

  • 请注意 我不想 改变我在这里介绍的主要设计。
  • 如果你认为这个不适合
  • ,请随意更改标题
  • 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的定义移到头文件中?

我不想改变它,因为这是一个非常复杂的计划而且我不想打破它的'&#39;通过做这样的事情来设计。

我可能以错误的方式使用它,但如果我无法访问iterate_breakpoints(),为什么我可以使用BreakpointInfo功能进行访问?

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

最好的问候。

1 个答案:

答案 0 :(得分:3)

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

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

所需的信息