无敌小布 2019-05-20 18:50 采纳率: 100%
浏览 1384
已采纳

keil跨文件调用结构体报错

最近学STM32项目遇到问题。我在a.h定义了结构体 typedef struct{}A 并extern A my_a,在a.c初始化了my_a={参数值}。在c.c中我定义了一个函数 A exp(A _data),c.h中include"a.h",然后声明函数 A exp(A _data)(需要在main()中调用的),这时c.c单独编译通过,但是整体编译生成hex时候就会报APP/c.h(9): error: #20: identifier A" is undefined A A exp(A _data)
真的想不明白 求大佬救助

main.c

#include "a.h"
int main()
{
A Adata;
Adata=fun2(my_a);

}

a.c

#include "a.h"

A my_a={.a=1};

a.h文件

#ifndef _a_H
#define _a_H
#include "c.h"
 typedef struct{
 int a;
 }A;
extern A my_a;
#endif

c.c文件

#include "c.h"
A fun2(A _data)
{

  return _data;
}

c.h文件

#ifndef _c_H
#define _c_H
#include "a.h"
A fun2(A _data);
#endif

错误 .\app\c.h(4): error: #20: identifier "A" is undefined
A fun2(A _data);

  • 写回答

2条回答 默认 最新

  • su_ds 2019-05-20 22:13
    关注

    需要修改两点:
    1、删除a.h中对c.h的包含,因为a.h包含c.h,c.h又包含a.h,造成循环包含。
    2、在main.c中包含c.h。

    修改之前main.c展开如下,部分代码将不参与编译

    #ifndef _a_H
    #define _a_H
    
    #ifndef _c_H
    #define _c_H
    
    #ifndef _a_H
    #define _a_H
    //以下代码不编译
    #include "c.h"
     typedef struct{
     int a;
     }A;
    extern A my_a;
    //以上代码不编译
    #endif
    
    A fun2(A _data);
    #endif
    
     typedef struct{
     int a;
     }A;
    extern A my_a;
    #endif
    
    int main()
    {
    A Adata;
    Adata=fun2(my_a);
    
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题