2017-07-03 3 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

あなたが読んでいるものを書籍/チュートリアルを知ってはいけない:あなたはまた、(あなたはC99を使用して、またはそれより新しい何かをしていると仮定した場合)初期化子を使用することができます。私の推測ではあなたはそれを誤解しています。構造体定義の中に初期化子を持つことは無効です。 – 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の変数を定義してから、それらを初期化します。

編集:Initializers

関連する問題