在源代码中初始化结构时出错

Error initializing stuct in source code

我正在使用其他人编写的一些代码,用 arduino 在我的 imu 中实现卡尔曼滤波器。我理解它的绝大部分及其背后的数学原理,但是我在实现它时遇到了一些我无法理解的错误(严重缺乏关于 typdefs 和结构以及初始化它们的知识)。如果有人能向我解释这个错误,将不胜感激。

头文件包含这个...

struct kalman_data{

    float x1, x2, x3;

    float p11, p12, p13, 
          p21, p22, p23, 
          p31, p32, p33;

    float q1, q2, q3;
};

typedef struct _kalman_data kalman_data;

void kalman_data(kalman_data* data);
void kalman_calc(kalman_data* data, float z1, float z2);

我的arduino代码包含这个..

kalman_data pitch_data;
kalman_data roll_data;

void loop(){

  kalman_data(&pitch_data);
  kalman_data(&roll_data);
  kalman_calc(&pitch_data, pitch, gyro_yz); 
  kalman_calc(&roll_data, roll, gyro_xz);
}

这是我得到的错误...

In file included from test.ino:2:0: E:\Users\Alexander\Documents\Arduino\libraries\Kalman/kalman.h:30:29: error: conflicting declaration 'typedef struct _kalman_data kalman_data'
typedef struct _kalman_data kalman_data;

E:\Users\Alexander\Documents\Arduino\libraries\Kalman/kalman.h:17:8: error: 'struct kalman_data' has a previous declaration as 'struct kalman_data' struct kalman_data{

struct 定义正在保留名称 kalman_data 并且 typedef 正在尝试再次保留名称,用于名为 _kalman_data 的结构。这会导致错误。

要纠正此问题,请使用 struct _kalman_data 然后 typedef 将按预期工作。

struct kalman_data{

应该是

struct _kalman_data{

为了对应后面的

typedef struct _kalman_data kalman_data;

然后,函数

void kalman_data(kalman_data* data);

最好改名。我记得 C 和 C++ 都允许您为函数重用类型名称,同时在范围内使用这两种名称,但即使允许这样做也绝对不是一个好主意。很混乱。