我正在对 ESP32 设备进行编程,偶然发现了这个奇怪的问题,我无法理解。我想要的只是在我的头文件中声明一个结构,然后在我的源文件中初始化它。
我的头文件:
struct response_sensor_info{
uint16_t temp;
bool door_state;
bool motion;
};
//declare some function prototype that is going to use that structure
void send_multiple_responses(response_sensor_info sensor_info_struct);
我的.c 文件:
#include "my_header.h"
struct response_sensor_info sensor_info_struct;
void send_multiple_responses(response_sensor_info sensor_info_struct){
//do something with the struct here
}
由于以下错误,我无法编译我的代码:
error: unknown type name 'response_sensor_info'
void send_multiple_responses(response_sensor_info sensor_info_struct);
有人可以帮助我了解问题所在吗?我已经明确声明了该结构,但在函数原型中无法识别它
您没有类型说明符
response_sensor_info
。您有类型说明符 struct response_sensor_info
。
所以函数必须这样声明
void send_multiple_responses(struct response_sensor_info sensor_info_struct);
您可以为类型说明符引入别名
struct response_sensor_info
,例如
struct response_sensor_info{
uint16_t temp;
bool door_state;
bool motion;
};
typedef struct response_sensor_info response_sensor_info;
在这种情况下,你的函数声明将是正确的。
看来实际上函数应该这样声明
void send_multiple_responses(struct response_sensor_info *sensor_info_struct);
也就是说,如果要更改函数内的对象,它应该通过指向它的指针引用来接受结构类型的对象。在任何情况下,通过引用传递都会阻止创建结构类型对象的副本。
如果函数不更改传递的对象,那么应该像这样声明
void send_multiple_responses( const struct response_sensor_info *sensor_info_struct);
还要确定是否需要在文件范围内定义结构体类型的对象。