2017-06-22 81 views
-2

我正在用C寫一個遊戲,但我一直在收到一些錯誤。一個突出的是這個。 「非法標識符:X」其中X是結構內變量的類型。一個實例Illegal Identifier:MapItem由以下代碼引起:Visual C 2012:我越來越奇怪的錯誤。代碼段和錯誤提供

typedef struct MapItem{ 
int item; 
int count; 
}; 

typedef struct MapTile{ 
MapItem item; 
int x; 
int y; 
int tile; 
Direction dir; 
int drop; 
}; 

該錯誤附加到MapTile結構中的第一行。我想知道爲什麼會發生此錯誤,以及如何解決此問題。

該代碼段按照確切的順序從map.h中獲取。方向是在同一標題中聲明的枚舉。

謝謝大家的回答。但是,我確實在4小時前收到了我需要的答案。

+0

您的typedef缺少實際的類型名稱! –

+0

寫一個有效的C代碼稍微的OT替代方法是使用C++編譯並刪除'typedef'關鍵字, – Clifford

+0

考慮不使用'typedef's!您不必輸入更多... – pmg

回答

1

您的typedef不正確。語法是:

typedef type typealias ; 

所以:

typedef struct 
{ 
    int item; 
    int count; 
} MapItem; 

typedef struct 
{ 
    MapItem item; 
    int x; 
    int y; 
    int tile; 
    Direction dir; 
    int drop; 
} MapTile; 

注意類型正在這裏別名是匿名結構,結構體標籤時,才需要自引用的結構。

1

typedef用於創建另一種類型的別名(現有的或在同一typedef語句中定義的)。

它的一般格式爲:

typedef existing_or_new_type alias; 

的別名鍵入您的typedeftypedef語句中定義的新struct MapItem但別名丟失。這是錯誤的原因。

您可以使用:

typedef struct MapItem { 
    int item; 
    int count; 
} MapItem; 

此語句聲明新型struct MapItem(該struct關鍵字是類型名稱的一部分)和新類型MapItem那就是struct MapItem的別名。這意味着無論你在哪裏,都可以或不得不使用struct MapItem,您可以使用MapItem代替。

如果這看起來很混亂,您可以對struct類型及其別名使用不同的名稱。或者你可以在所有從struct定義省略名稱:

typedef struct { 
    int item; 
    int count; 
} MapItem; 

這樣,MapItem是一個匿名struct類型的名稱,它是聲明這種類型的變量的唯一途徑。

相關問題