Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用typedef定义结构_C_Typedef - Fatal编程技术网

C 如何使用typedef定义结构

C 如何使用typedef定义结构,c,typedef,C,Typedef,我正在努力做到以下几点: typedef struct tagSTRUCT { MYPROC lpfnMyProc; } STRUCT, *HSTRUCT; typedef void (*MYPROC)(HSTRUCT); void version1(HSTRUCT ); // version of delegate MYPROC void version2(HSTRUCT ); // another version ... ,这给了我一个编译错误。我试图在结构类型定义之前创建'M

我正在努力做到以下几点:

typedef struct tagSTRUCT
{
    MYPROC lpfnMyProc;
} STRUCT, *HSTRUCT;

typedef void (*MYPROC)(HSTRUCT);

void version1(HSTRUCT ); // version of delegate MYPROC
void version2(HSTRUCT ); // another version
...
,这给了我一个编译错误。我试图在结构类型定义之前创建'MYPROC'的类型定义,但遇到了太多编译错误。我尝试使用struct的前向声明,但也遇到了一个编译错误:

struct tagSTRUCT;
typedef tagSTRUCT STRUCT, *HSTRUCT;
typedef void (*MYPROC)(HSTRUCT );
struct tagSTRUCT
{
   MYPROC lpfnMyProc;
};

我该怎么办?

这是一种奇怪的周期性依赖,但以下方法可能有效:

struct tagSTRUCT;
typedef struct tagSTRUCT *HSTRUCT;
typedef void (*MYPROC)(HSTRUCT*);

typedef struct tagSTRUCT
{
    MYPROC lpfnMyProc;
} STRUCT, *HSTRUCT;

void version1(HSTRUCT ); // version of delegate MYPROC
void version2(HSTRUCT ); // another version

这是一种奇怪的周期性依赖,但以下可能会起作用:

struct tagSTRUCT;
typedef struct tagSTRUCT *HSTRUCT;
typedef void (*MYPROC)(HSTRUCT*);

typedef struct tagSTRUCT
{
    MYPROC lpfnMyProc;
} STRUCT, *HSTRUCT;

void version1(HSTRUCT ); // version of delegate MYPROC
void version2(HSTRUCT ); // another version
试试这个:

struct tagSTRUCT;

typedef void (*MYPROC)(struct tagSTRUCT *);

typedef struct tagSTRUCT {
    MYPROC p;
} STRUCT, * HSTRUCT;
试试这个:

struct tagSTRUCT;

typedef void (*MYPROC)(struct tagSTRUCT *);

typedef struct tagSTRUCT {
    MYPROC p;
} STRUCT, * HSTRUCT;
试试这个:

typedef struct tagSTRUCT *HSTRUCT;
typedef void (*MYPROC)(HSTRUCT);

typedef struct tagSTRUCT
{
    MYPROC lpfnMyProc;
} STRUCT;
这样,您仍然可以将其称为
HSTRUCT

尝试以下方法:

typedef struct tagSTRUCT *HSTRUCT;
typedef void (*MYPROC)(HSTRUCT);

typedef struct tagSTRUCT
{
    MYPROC lpfnMyProc;
} STRUCT;

通过这种方式,您仍然可以将其称为
HSTRUCT

转发声明是没有用的,因为
STRUCT
有一个实际的
MYPROC
成员,所以
MYPROC
需要是一个完整的类型。@KerrekSB但是
MYPROC
可以用转发声明的
tagSTRUCT
定义,不是吗@KonradRudolph:
MYPROC
只是一个typedef,所以它根本没有任何定义…@KerrekSB Err,是的。无论如何,你的答案正是我所想的。向前声明是没有用的,因为
STRUCT
有一个实际的
MYPROC
成员,所以
MYPROC
需要是一个完整的类型。@KerrekSB但是
MYPROC
可以用向前声明的
tagSTRUCT
来定义,不是吗@KonradRudolph:
MYPROC
只是一个typedef,所以它根本没有任何定义…@KerrekSB Err,是的。无论如何,你的答案正是我所想的。如果我能选择一个以上的最佳答案!!如果我能选择一个以上的最佳答案!!如果我能选择一个以上的最佳答案!!如果我能选择一个以上的最佳答案!!