2016-02-27 6 views
2
typedef struct 
{ 
    char name[3]; 
    bool initial_state; 
    bool final_state; 
    STATUSTRANSITION *transitions; 
    int numberTransitions; 
} STATE; 

typedef struct 
{ 
    char c; 
    STATE final; 
} STATUSTRANSITION; 

ГОСУДАРСТВО не знает СОСТОЯНИЕ. Как я могу исправить эту проблему? Когда я ставлю STATUSTRANSITION выше ГОСУДАРСТВА, у меня такая же проблема с STATUSTRANSITION, поскольку у нее есть состояние.Неизвестный тип в строении

EDIT: Просто, чтобы быть чистым. Я получаю исключение «Неизвестный тип» для структуры.

ответ

4

Для того, чтобы использовать тип в объявлении, вам необходимо либо определить или объявить его перед употреблением. Единственным исключением является имя самого struct: вы можете использовать его тег для объявления полей внутри самой структуры.

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

struct STATUSTRANSITION; 

typedef struct 
{ 
    char name[3]; 
    bool initial_state; 
    bool final_state; 
    struct STATUSTRANSITION *transitions; 
    int numberTransitions; 
} STATE; 

typedef struct STATUSTRANSITION 
{ 
    char c; 
    STATE final; 
} STATUSTRANSITION; 

Demo.

+2

Первая строка вашего примера не требуется. – AnArrayOfFunctions

2

попробовать это

typedef struct statustransition STATUSTRANSITION; 

typedef struct 
{ 
    char name[3]; 
    bool initial_state; 
    bool final_state; 
    STATUSTRANSITION *transitions; 
    int numberTransitions; 
} STATE; 

struct statustransition 
{ 
    char c; 
    STATE final; 
}; 
+0

Почему он должен быть маленьким? – Goldi

+0

@DennisvonEich Название тега может быть любым. Давайте изменим, вы хотите. – BLUEPIXY

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