2016-08-24 17 views
-5

現在、私はEEpromファイル構造体で作業していますが、これはコンパイル時にデフォルト値で埋められています。タイプ「BOOL」と「BYTE」のすべてが一つの構造を除いて、これまで正常に動作し、私は、エラーを見つけることができないよう...構造体のイニシャライザが多すぎます

typedef struct { // ===== instance parameters ===== 
     BOOL bInstanceActive; 
     BYTE nInstanceGrp[4]; 
     BYTE nEventFilter; 
     BYTE nEventScheme; 
     BYTE nEventPriority; 
     BYTE nShortMul; 
     BYTE nDoubleMul; 
     BYTE nRepeatMul; 
     BYTE nStuckMul; 
     BYTE nDummy[3]; 
    } InstanceBlock; 
#define DEFAULT_INSTANCE_BLOCK {1, {255,255,255,255}, 244, 0, 2, 15, 5, 10, 30, {0}} 

unsigned char型の両方です。

異なる構造体は、その後1つのEEprom_Mapping構造体に結合している(しかし、私は現在、それだけでは、このいずれかを持って、他のすべてが正常に動作):

EEprom_Mapping xEE __attribute__((section(".eeprom"))) = DEFAULT_EEprom_Mapping; 

typedef struct { 
    InstanceBlock xInstance[1]; ** edited should be 1 instead of 0 
    } EEprom_Mapping; 
#define DEFAULT_EEprom_Mapping { DEFAULT_INSTANCE_BLOCK } 

それは、この方法で初期化されます

「InstanceBlock [0]」のイニシャライザが多すぎます

ご協力いただきありがとうございます。

+2

これはCまたはC++ですか? – molbdnilo

+2

さて、1つはゼロよりも大きいです。とにかく、C++ではゼロ長の自動ストレージアレイが許可されていません。 – juanchopanza

+1

言語に正しくタグを付けるようにしてください。これが、そうでなければ良い質問が下落されている理由です。 – Bathsheba

答えて

0

、4つの要素で、あなたには、いくつかの括弧欠場:

// Note double brackets 
#define DEFAULT_EEprom_Mapping {{ DEFAULT_INSTANCE_BLOCK, DEFAULT_INSTANCE_BLOCK, DEFAULT_INSTANCE_BLOCK, DEFAULT_INSTANCE_BLOCK }} 

Demo

を確かに、xInstanceは構造内部の配列ですので、あなたは、構造体の初期化子リストのためのブラケットが必要配列の初期化子リストのための括弧。

+0

ありがとうございました。 – Maku

1

あなたの配列xInstanceは、サイズが0の配列なので、コンパイラは1つの要素をその中に収めようとするので文句を言います。 2つ目の隠し質問については

+0

うわー、すみません、私はばかです。それは1つのブロックの問題を修正しますが、xInstance [4]で4ブロック、DEFAULT_EEprom_Mappingで4ブロックと同じものを試しても、同じエラーが発生します。 – Maku

関連する問題