forward declare typedef'd struct

时间:2010-03-12 17:26:31

标签: c++ forward-declaration

我无法弄清楚如何转发声明一个windows结构。定义是

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

我真的不想进入这个标题,因为它包含在任何地方。

我试过

struct CONTEXT

struct _CONTEXT

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

2 个答案:

答案 0 :(得分:9)

extern "C" { typedef struct _CONTEXT CONTEXT, *PCONTEXT; }

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

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

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

答案 1 :(得分:1)

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

// 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
   // ....
}