2015-04-14 3 views
0
#include <stdio.h> 

typedef struct mystruct 
{ 
    void (*ExitFnPtr)(mystruct); 
    int a; 
}mystruct; 

int main() 
{ 
    mystruct M; 

    printf("Hello, World!\n"); 

    return 0; 
} 

Привет всем, кто-нибудь знает, как решить рекурсивную структурную ошибку, указанную выше?Рекурсивная структура в C

+0

Пожалуйста, добавьте сообщение об ошибке на ваш вопрос - мы можем» t читать ваш ум! ;-) – Matt

+6

'void (* ExitFnPtr) (struct mystruct);' – BLUEPIXY

+0

Строит отлично http://ideone.com/XQ6A2t – imreal

ответ

4

В этом нет ничего рекурсивного.

Ваша проблема заключается только в том, что определение mystruct неизвестно до конца определения структуры.

Попробуйте

typedef struct mystruct 
{ 
    void (*ExitFnPtr)(struct mystruct ms); 
    int a; 
} mystruct; 

struct mystruct таким же, как mystruct (вы просто ЬурейиЙ его), но известно, что в этот момент времени.

Вы также могли бы сделать опережающее объявление, если вы не хотите, чтобы изменить исходный код (хотя это не так читаемым, как указано выше:

typedef struct mystruct mystruct; 

typedef struct mystruct 
{ 
    void (*ExitFnPtr)(mystruct ms); 
    int a; 
} mystruct; 
+2

Является ли необходимость в« typedef »второй? – Quentin

+1

Нет, вы можете его оставить, но это не наносит вреда. – mfro

Смежные вопросы