struct函数中的初始化程序无效

时间:2016-07-27 16:31:49

标签: c

我有一个函数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

1 个答案:

答案 0 :(得分:2)

对此错误最合理的解释是必须在全局范围内定义struct Reference_XS Acc_G。全局变量的初始值设定项必须在C中保持不变。