在头文件中声明时无法识别结构

问题描述 投票:0回答:1

我正在对 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);

有人可以帮助我了解问题所在吗?我已经明确声明了该结构,但在函数原型中无法识别它

c struct namespaces declaration function-declaration
1个回答
2
投票

您没有类型说明符

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

还要确定是否需要在文件范围内定义结构体类型的对象。

© www.soinside.com 2019 - 2024. All rights reserved.