在源代码中初始化结构时出错
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++ 都允许您为函数重用类型名称,同时在范围内使用这两种名称,但即使允许这样做也绝对不是一个好主意。很混乱。
我正在使用其他人编写的一些代码,用 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++ 都允许您为函数重用类型名称,同时在范围内使用这两种名称,但即使允许这样做也绝对不是一个好主意。很混乱。