2016-02-27 29 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; 

STATE不知道STATUSTRANSITION。我該如何解決這個問題?當我將STATUSTRANSITION置於STATE之上時,我有與STATUSTRANSITION相同的問題,因爲它有STATE。結構中的未知類型

編輯:只是要清楚。結構中出現'未知類型'異常。

回答

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