【问题标题】:Error initializing stuct in source code在源代码中初始化结构时出错
【发布时间】:2015-06-20 13:33:38
【问题描述】:

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

头文件包含这个...

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);
}

这是我得到的错误......

在 test.ino:2:0 包含的文件中: E:\Users\Alexander\Documents\Arduino\libraries\Kalman/kalman.h:30:29:错误:冲突声明'typedef struct _kalman_data kalman_data'
typedef struct _kalman_data 卡尔曼数据;

E:\Users\Alexander\Documents\Arduino\libraries\Kalman/kalman.h:17:8: 错误:'struct kalman_data' 先前声明为'struct kalman_data' 结构卡尔曼数据{

【问题讨论】:

  • struct kalman_data{ 更改为struct _kalman_data{

标签: c struct types arduino typedef


【解决方案1】:
struct kalman_data{

应该是

struct _kalman_data{

为了对应后续

typedef struct _kalman_data kalman_data;

然后,函数

void kalman_data(kalman_data* data);

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢,我知道这很简单:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 2016-03-20
    相关资源
    最近更新 更多