2016-11-11 3 views
1

私は組み込みシステムラボ用の有限状態マシンを作成しています。コンパイラ(私はARMのキールを使用しています)は、私の構造体のインスタンスの配列を宣言しようとすると文句を言っています。私は何を間違えたのですか?構造体インスタンスの配列を作成する[C]

私のコード(の一部):

struct State { 
    unsigned long OutCars; 
    unsigned long OutWalk; 
    unsigned long Time; 
    unsigned long Next[8]; 
}; 

typedef const struct State SType; 


SType FSM[11] = { 
    {0x0C, PF1, 100, {goW, goW, waitW, waitW, waitW, waitW, waitW, waitW} }, 
    {0x14, PF1, 50, {goW, goW, goS, goS, goWa, goWa, goWa, goWa} }, 
    {0x21, PF1, 100, {goS, waitS, goS, waitS, waitS, waitS, waitS, waitS} }, 
    {0x22, PF1, 50, {goS, goW, goS, goW, goWa, goW, goWa, goW} }, 
    {0x24, PF3, 100, {goWa, off1, off1, off1, goWa, off1, off1, off1} }, 
    {0x24, OFF, 50, {on1, on1, on1, on1, on1, on1, on1, on1} }, 
    {0x24, PF1, 50, {off2, off2, off2, off2, off2, off2, off2, off2} }, 
    {0x24, OFF, 50, {on2, on2, on2, on2, on2, on2, on2, on2} }, 
    {0x24, PF1, 50, {off3, off3, off3, off3, off3, off3, off3, off3} }, 
    {0x24, OFF, 50, {on3, on3, on3, on3, on3, on3, on3, on3} }, 
    {0x24, PF1, 50, {goWa, goW, goS, goS, goWa, goW, goS, goS} }, 
}; 

エラーメッセージ:

...

TableTrafficLight.c(155): error: #67: expected a "}"

{0x0C, PF1, 100, {goW, goW, waitW, waitW, waitW, waitW, waitW, waitW} },

...

編集:私は、セミコロンで私の#define文を終了しましたが判明します。おっとっと。学んだ教訓。

+2

あなたが示されたコードは何も問題はありません。 (もちろん、これらの定数をどのように定義したかはわかりません)。私はそのコードと関連する定義を別々のファイルに入れ、そのファイルを単独でコンパイルすることをお勧めします。多くの場合、Cコンパイラによって出されたエラーメッセージは、ファイルの前のエラー(セミコロンがないなど)によって引き起こされます。 – user3386109

+1

コンパイラのエラー/警告は、ソースの特定の行(ここでは155)を参照しています。これはどのラインであるかを明確にする必要があります。 – alk

+0

@alkエラーメッセージの下に表示される行は、配列の初期化の最初の行に表示されます。 – user3386109

答えて

2

は(強調されているように削除)ブレースを閉じる前に、最後のカンマを削除します。

SType FSM[11] = { 
    {0x0C, PF1, 100, {goW, goW, waitW, waitW, waitW, waitW, waitW, waitW} }, 
    {0x14, PF1, 50, {goW, goW, goS, goS, goWa, goWa, goWa, goWa} }, 
    {0x21, PF1, 100, {goS, waitS, goS, waitS, waitS, waitS, waitS, waitS} }, 
    {0x22, PF1, 50, {goS, goW, goS, goW, goWa, goW, goWa, goW} }, 
    {0x24, PF3, 100, {goWa, off1, off1, off1, goWa, off1, off1, off1} }, 
    {0x24, OFF, 50, {on1, on1, on1, on1, on1, on1, on1, on1} }, 
    {0x24, PF1, 50, {off2, off2, off2, off2, off2, off2, off2, off2} }, 
    {0x24, OFF, 50, {on2, on2, on2, on2, on2, on2, on2, on2} }, 
    {0x24, PF1, 50, {off3, off3, off3, off3, off3, off3, off3, off3} }, 
    {0x24, OFF, 50, {on3, on3, on3, on3, on3, on3, on3, on3} }, 
    {0x24, PF1, 50, {goWa, goW, goS, goS, goWa, goW, goS, goS} }, //remove this comma 
}; 

は次のようになります。

SType FSM[11] = { 
    {0x0C, PF1, 100, {goW, goW, waitW, waitW, waitW, waitW, waitW, waitW} }, 
    {0x14, PF1, 50, {goW, goW, goS, goS, goWa, goWa, goWa, goWa} }, 
    {0x21, PF1, 100, {goS, waitS, goS, waitS, waitS, waitS, waitS, waitS} }, 
    {0x22, PF1, 50, {goS, goW, goS, goW, goWa, goW, goWa, goW} }, 
    {0x24, PF3, 100, {goWa, off1, off1, off1, goWa, off1, off1, off1} }, 
    {0x24, OFF, 50, {on1, on1, on1, on1, on1, on1, on1, on1} }, 
    {0x24, PF1, 50, {off2, off2, off2, off2, off2, off2, off2, off2} }, 
    {0x24, OFF, 50, {on2, on2, on2, on2, on2, on2, on2, on2} }, 
    {0x24, PF1, 50, {off3, off3, off3, off3, off3, off3, off3, off3} }, 
    {0x24, OFF, 50, {on3, on3, on3, on3, on3, on3, on3, on3} }, 
    {0x24, PF1, 50, {goWa, goW, goS, goS, goWa, goW, goS, goS} } 
}; 
+3

Umm、NO。 C仕様では、特にカンマを使用できます。 – user3386109

+2

@ user3386109: "*はそのカンマを許可します*" C99からのみ。 – alk

+0

しようとしましたが、彼は今は効果がありました。また、コンパイラはそれについて悪いことは何も持っていませんでした。しかし、指摘してくれてありがとう、それは問題だった可能性があります。 – proprol

関連する問題