2012-05-29 2 views
0

Я пытаюсь сделать следующее:как определения структуры с ЬурейиМи

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

typedef void (*MYPROC)(HSTRUCT); 

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

, что дает мне ошибку компиляции. Я попытался сделать typedef из 'MYPROC' перед struct typedef, но получил слишком ошибку компиляции. Я попытался использовать форвардную декларацию структуры и получил также ошибку компиляции:

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

Что мне делать?

+0

Вперед декларация не используется, так как 'STRUCT' имеет действительный член' MYPROC', поэтому 'MYPROC' должен быть полным типом. –

+0

@KerrekSB Но 'MYPROC' может быть определен просто отлично с объявленным вперед' tagSTRUCT', нет? ... –

+0

@KonradRudolph: 'MYPROC' - всего лишь typedef, поэтому он не получает никакого определения вообще ... –

ответ

1

Попробуйте это:

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

typedef struct tagSTRUCT 
{ 
    MYPROC lpfnMyProc; 
} STRUCT; 

Таким образом, вы можете по-прежнему обратитесь к нему как HSTRUCT.

1

Это странно циклический dependacy, но следующий может работать:

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 
+0

Если бы я мог выбрать более одного ответа! –

2

Попробуйте это:

struct tagSTRUCT; 

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

typedef struct tagSTRUCT { 
    MYPROC p; 
} STRUCT, * HSTRUCT; 
+0

Если бы я мог выбрать более одного ответа! –