结构体声明,使不同子文件调用用一个结构体的问题请教

2019-12-21 12:09发布

在改一个现有工程,在main.h中定义了一下结构体
typedef struct  sensor_data
{
        signed short int  X;
        signed short int  Y;
        signed short int  Z;
};
typedef struct  sensor_data SENSOR_DATA;

SENSOR_DATA MagClabriteMAX;
SENSOR_DATA MagClabriteMIN;
SENSOR_DATA AccClabriteMAX;
SENSOR_DATA AccClabriteMIN;

如何声明让这些变量在其他子文件中也能使用。
在其他子文件中的.h文件中我做了如下定义
typedef struct  sensor_data SENSOR_DATA;

extern SENSOR_DATA MagClabriteMAX;
extern SENSOR_DATA MagClabriteMIN;
extern SENSOR_DATA AccClabriteMAX;
extern SENSOR_DATA AccClabriteMIN;
编译没有问题,但是在使用中
MagClabriteMAX.X = ONE;就报错
stmflash.c(27): error:  #70: incomplete type is not allowed
针对这个问题请教一下大家
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
leafstamen
1楼-- · 2019-12-21 15:20
枚举没引用过来
DevLabs
2楼-- · 2019-12-21 19:20

.h文件中声明, .c文件中定义. 一般做法:

xx.h
-------------------------
typedef struct
{
    uint8_t x;
    uint8_t y;
} my_type;

// 声明
extern my_type var1;
extern my_type var2;

xx.c
------------------------
#include "xx.h"

// 定义
my_type var1;
my_type var2;

xy.c
-----------------------
#include "xx.h"

var1.x = 100;
var2.y = 200

很久没写过了, 若有错误请指出
陶新成
3楼-- · 2019-12-22 00:22
 精彩回答 2  元偷偷看……
wye11083
4楼-- · 2019-12-22 00:55
陶新成 发表于 2018-3-5 10:33
还是没有编译通过啊

你要把结构体定义放到公共头文件里。查查是不是只有一个名字而没有定义。
gsq19920418
5楼-- · 2019-12-22 04:06
好奇怪的使用方式,typedef 重新制定了結構躰(sensor_data)的別名,但是沒有定義結構體,當然找不到.X
gsq19920418
6楼-- · 2019-12-22 07:53
應該像3樓那樣定義才能正常調用

一周热门 更多>