2017-09-11 3 views
0

私は構造体を宣言し、次にこれらの構造体の配列を、次にこれらの構造体の配列の配列を宣言したいと思います。最初の2つの部分はうまく、私は3番目の部分と苦労しています。構造体の配列の配列を取り込みますか?

私はnot_trace_groupsに配列を割り当てようとすると、私のコードはコンパイルされず、これを正しく行う方法がわかりません。

typedef struct trace 
{ 
    uint32_t upstream_pin; 
    uint32_t dnstream_pin; 
    uint32_t led_pin; 
}trace; 

trace all_traces[NUM_TRACES] = {{GPIO_Pin_3, GPIO_Pin_7, GPIO_Pin_0}, 
          {GPIO_Pin_4, GPIO_Pin_6 , GPIO_Pin_1}, 
          {GPIO_Pin_5, GPIO_Pin_5 , PIO_Pin_1}, 
          {GPIO_Pin_6, GPIO_Pin_4 , PIO_Pin_0}, 
          {GPIO_Pin_7, GPIO_Pin_3 , GPIO_Pin_1}, 
          {GPIO_Pin_0, GPIO_Pin_15, GPIO_Pin_2}}; 

trace not_trace_groups[NUM_TRACES][NUM_TRACES]; 

void main() 
{ 
    for (int i = 0; i < NUM_TRACES; i++) 
    { 
     not_trace_group[i] = {all_traces[i], all_traces[(i+1)%NUM_TRACES], all_traces[(i+2)%NUM_TRACES], all_traces[(i+3)%NUM_TRACES], all_traces[(i+4)%NUM_TRACES], all_traces[(i+5)%NUM_TRACES])}; 
    } 
    while(1 == 1){ 
     for (int i = 0; i < NUM_TRACES; i++) 
     { 
      trace_test(not_trace_group[i]); 
     } 
} 

void trace_test(trace cur_trace, trace not_trace1, trace not_trace2, trace not_trace3, trace not_trace4, trace not_trace5) 
{ 
// do some stuff 
} 

Iは受信エラーがある:

error: expected expression before '{' token 
     not_trace_group[i] = {all_traces[i], all_traces[(i+1)%NUM_TRACES], all_traces[(i+2)%NUM_TRACES], all_traces[(i+3)%NUM_TRACES], all_traces[(i+4)%NUM_TRACES], all_traces[(i+5)%NUM_TRACES])}; 
私はアレイの第二のレベルは私は、この試したことはできませんたAssignTo恐らく考え

trace not_trace_groups[NUM_TRACES]; 

をこれが与えます同じエラー

+0

typedefで初期化することはできません。とにかく、あなたのプログラムはすべてC言語で書かれていません。 –

+1

これはむしろあいまいですが、配列を関数に渡してから、テストであるインデックスにフラグを立てると便利です。 (size_t i = 0; i Lundin

+0

' trace_test'は6つの引数をとりますが、あなたは1だけを指定しました。また、配列に代入することもできません。 –

答えて

1

使用できません -

not_trace_group[i] = {all_traces[i], all_traces[(i+1)%NUM_TRACES], all_traces[(i+2)%NUM_TRACES], all_traces[(i+3)%NUM_TRACES], all_traces[(i+4)%NUM_TRACES], all_traces[(i+5)%NUM_TRACES])}; 

これは初期化時にのみ使用できる割り当てです。このようにnot_trace_groups [i]に値を割り当てることはできません。あなたはループのために2を使用し、正確な要素not_trace_group [i] [j]を取得し、値を代入するだけです。あなたは代入式を使用して配列を初期化しようとしたが、右側にあなたは配列初期化子{a,b,c, ...}を使用

not_trace_group[0][0] = all_traces[0]; 
0

- 例えば 、ここであなたは次のように値を割り当てることができます。構造体を初期化するこの方法は、宣言の後にのみ可能ですstruct_type struct_var = {init...}