2017-07-03 109 views
-2
typedef struct states{ 
    char stateName[20]; 
    char capital[20]; 
    char fact* = (char*)calloc(1000,sizeof(char)); 
}states; 

我不明白爲什麼它給我行此錯誤錯誤:預期「:」,「」,‘’,‘}’或‘之前__attribute__’‘*’令牌

char fact* = (char*)calloc(1000,sizeof(char)); 

它看起來每個字符的字符,我正在看的示例代碼。任何人都可以請解釋我做錯了什麼?

+3

不知道你在讀什麼書/教程。我的猜測是你誤解了它。在結構定義中使用初始化器是無效的。 – kaylum

+0

它在C++中是合法的,但在C++中,您可能不會打擾使用'typedef'。另外,'char fact *'應該是'char * fact'。你能否更新你的問題來表明你從哪裏得到了這個例子? –

+0

如果在定義結構時允許動態內存分配,(_think_)當calloc失敗並返回空指針會發生什麼? – madD7

回答

0

正如kaylum指出的那樣,結構定義聲明瞭一個類型而不是可以初始化的變量。你的例子是:

typedef struct states{ 
    char stateName[20]; 
    char capital[20]; 
    char fact* = (char*)calloc(1000,sizeof(char)); //WRONG! - Initialization inside struct! 
}states; 

在這種情況下,你正在定義一個類型,而不是一個變量。之後您將定義類型爲states的變量,然後您將初始化它們。

編輯:您還可以使用初始化(假設你使用C99或較新的東西比):Initializers

相關問題