2017-09-11 92 views
0

我想声明一个结构体,然后是这些结构体的数组,然后是这些结构体数组的数组。前两部分都很好,我正在努力争取第三。填充结构数组的数组?

当我尝试将数组分配给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 
} 

我收到的错误是:

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

这是非常含糊的,但是你似乎会从向函数传递数组中获益,然后标记哪个索引是测试。让函数在访问该元素之前进行索引计算,沿着'void trace_test(size_t size,trace [size],size_t start)的行进行一些操作,其中 为{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 for循环,并获得确切的元素not_trace_group [i] [j]并为其赋值。 例如,在这里你可以指定值像 -

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

您尝试使用初始化赋值表达式的数组,但在右边你可以使用数组初始化{a,b,c, ...}。只有在声明struct_type struct_var = {init...}后才允许这种初始化结构的方式。