【问题标题】:forward declare typedef'd struct前向声明 typedef'd 结构
【发布时间】:2010-03-12 17:26:30
【问题描述】:

我不知道如何转发声明一个 windows 结构。定义是

typedef struct _CONTEXT
{
 ....
} CONTEXT, *PCONTEXT

我真的不想拉入这个标题,因为它无处不在。

我试过了

结构上下文

结构 _CONTEXT

没有运气(使用 winnt.h 中的实际结构重新定义基本类型。

【问题讨论】:

  • 您应该准确地发布您尝试过的内容。 struct _CONTEXT; 不应该产生错误,但它本身并不是特别有用。

标签: c++ forward-declaration


【解决方案1】:
extern "C" { typedef struct _CONTEXT CONTEXT, *PCONTEXT; }

您需要声明_CONTEXTstruct。并将其声明为extern "C" 以匹配windows.h(这是一个C 头文件)的外部链接。

但是,您不需要为typedef 提供定义,但如果您这样做,所有定义都必须匹配(One Definition Rule)。

编辑:我也忘记了外部“C”。

【讨论】:

    【解决方案2】:

    不是解决方案,而是解决方法:

    // h-file
    struct MyContext; // forward decl
    void f(MyContext * pContext); // use pointer
    
    
    //cpp-file
    #include <windows.h>
    struct MyContext {
       CONTEXT cont;
    };
    
    void f(MyContext * pContext)
    {
       CONTEXT * p_win_cont = & pContext->cont;
       // use p_win_cont
       // ....
    }
    

    【讨论】:

      猜你喜欢
      • 2012-06-09
      • 2018-11-06
      • 1970-01-01
      • 2017-04-05
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多