函数声明错误

Error declaring a function

这是一个头文件。但是当我将它包含在 main.c 中时,它会给我下一个错误:预期标识符或 'float' 之前的“(”。我知道这可能是一个非常愚蠢的错误,但我没有看到它。代码是:

#ifndef Reference
#define Reference
float mat_a[3][3];
struct Reference_XS
{
int Bytes;
unsigned char *Buffer_Lectura;
};
struct Reference_XS Sist_Referecence(float q0,float q1,float q2,float q3,float val1,float val2,float val3)
{
float mat_a={(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};
float mat_c[3][1];
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][0]=temp;       
    }
}
struct Reference_XS data={mat_c};
return data;
}
#endif

看看你的 mat_a 变量的初始化。

第一个错误是,你的 float mat_a 变量是使用初始化列表初始化的,但你必须忘记在 mat_a 之后添加数组标识符。你应该做的是 float mat_a[N] 其中 N 是你的 float 数组包含的元素数。

第二个错误是语句的一部分缺少左圆括号。您的第二个逗号后缺少括号。

float mat_a={(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_a={(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};

您正在尝试使用多个初始化器初始化标量对象,而且第三个初始化器没有左括号

2*q1*q3)+(2*q0*q1),

^^^

您似乎想定义一个名为 mat_a 的数组,而不是标量对象。