2016-07-27 112 views
0

我有一个函数Reference返回一个结构如下图所示:无效的初始化

struct Reference_XS { 
    float *mat_c; 
}; 

struct Reference_XS Reference(
    float q0, 
    float q1, 
    float q2, 
    float q3, 
    float val1, 
    float val2, 
    float val3 
) 
{ 
    float mat_a[3][3] = { 
     (2*q0*q0)+(2*q1*q1)-1, (2*q1*q2)-(2*q0*q3), (2*q1*q3)+(2*q0*q1), 
     (2*q1*q2)+(2*q0*q3), (2*q0*q0+(2*q2*q2)-1), (2*q2*q3)-(2*q0*q1), 
     (2*q1*q3)-(2*q0*q2), (2*q2*q3)+(2*q0*q1), (2*q0*q0)+(2*q3*q3)-1 
    }; 

    float mat_b[3][1] = { val1, val2, val3 }; 
    static float Mat_c[3]; 
    int i, k; 
    float temp = 0; 

    for (i = 0; i < 3; i++) { 
     temp = 0; 
     for (k = 0; k < 3; k++) { 
      temp = mat_a[i][k] * mat_b[k][0] + temp; 
      Mat_c[i] = temp;   
     } 
    } 

    struct Reference_XS data = { Mat_c }; 
    return data; 
} 

但在main.c,当我把它称为像

struct Reference_XS Acc_G = Reference(
    q0_XS, 
    q1_XS, 
    q2_XS, 
    q3_XS, 
    acx_XS, 
    acy_XS, 
    acz_XS 
); 

它显示了错误Invalid Initializer

+5

嘿,我想你刚刚拼写'参考'错误,或者只是这个问题中的拼写错误? – Matthew

+0

@Matthew嗨。对不起,这是输入的问题,在代码是好的 –

+0

然后显示您的*完整的*代码。 –

回答

2

对此错误最合理的解释是struct Reference_XS Acc_G必须在全局范围内定义。全局变量的初始化必须是C中的常量。

+0

我认为错误可能在头文件中,因为现在它出现了缺少括号的错误。 (错误:预期的标识符或'('之前的'浮动')。但头文件只是exacly作为帖子。我认为,如果我能纠正这可能错误的初始化消失 –

+0

@JuanBravo:你可以发布的内容'main.c'? – chqrlie