2012-04-30 9 views
1

私のCプログラムがコンパイルされない理由を理解できません。Cでの構造体メンバー演算子の使用

エラーメッセージがある:

$ gcc token_buffer.c -o token_buffer 
token_buffer.c:22: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token 

第1の構造 - トークンは、多くの場所で使用するためのもので、私は任意の構造のタグを使用することです。 2番目の構造体の宣言私は構造体タグを使用していないので、代わりにという名前の変数を定義します。

この構造体のメンバーの1つに値を割り当てると、コンパイルが失敗します。

ヘルプ?

/* 
* token_buffer.c 
*/ 

#include <stdio.h> 
#include <stdbool.h> 

/* A token is a kind-value pair */ 
struct token { 
    char *kind; 
    double value; 
}; 

/* A buffer for a token stream */ 
struct { 
    bool full; 
    struct token t; 
} buffer; 

buffer.full = false; 

main() 
{ 
    struct token t; 
    t.kind = "PLUS"; 
    t.value = 0; 

    printf("t.kind = %s, t.value = %.2f\n", t.kind, t.value); 
} 

答えて

4

あなたはCでの自立運営を持つことはできません:あなたはあなたのmainに初期化を配置する必要があります。

int main() { // Don't forget to make your main return int explicitly 
    struct token t; 
    buffer.full = false; // <---- Here it is legal 

    t.kind = "PLUS"; 
    t.value = 0; 

    printf("t.kind = %s, t.value = %.2f\n", t.kind, t.value); 
    return 0; // main should return status to the operating system 
} 
+0

感謝を行うC. 2つの異なるものです!今、私は「譲渡」と「初期化」を混同していると思います。 –

+1

@Gruffalo C99では、[指定イニシャライザ](http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Flanguage% 2Fref%2Fdesignators.htm)。 'buffer = {.full = false};'を 'buffer'の宣言に加えると、それもうまくいくはずです。 – dasblinkenlight

+0

これは私が欲しかったものです! 'token'メンバは後で割り当てられるので、私は本当に心配していませんが、' full'を初期化したいと思います。もう一度ありがとう! –

1

問題の一部です:buffer.full = false; あなたが外の値を設定しました。

この文をmain()に入れてください。

0

Assignementと初期化がジャスト

struct { 
    bool full; 
    struct token t; 
} buffer = { .full = false }; 
関連する問題