你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

工程链接时 出现重复定义问题!!!!

[复制链接]
su-409464 提问时间:2015-10-16 14:20 /
请问一个头文件 定义报错问题

我自己定义了一个 wifi_uart.h 的文件, 文件中很多unsigned char  和布尔  变量要定义。

我调用了  uin8_t  和bool  来定义, 如下:

  • #ifndef _wifi_uart_H
  • #define _wifi_uart_H
  • #include "stm8s.h"
  • /*************    本地变量声明    **************/
  • uint8_t    RX1_Buffer[RX1_Lenth];    //接收缓冲 idata
  • uint8_t    TX1_Cnt;    //发送计数
  • uint8_t    RX1_Cnt;    //接收计数
  • bool    B_TX1_Busy;    //发送忙标志
  • #endif

复制代码

因为uint8_t 是 在stm8s.h 中 定义的。
  • /*!< Unsigned integer types  */
  • typedef unsigned char     uint8_t;
  • typedef unsigned short    uint16_t;
  • typedef unsigned long     uint32_t;
  • typedef enum {FALSE = 0, TRUE = !FALSE} bool;

复制代码

     所有我在 wifi_uart.h 中    添加了头文件  #include "stm8s.h"  

但是编译的的时候出现了 重复定义的错误:
   #error clnk Debug\smartsocket.lkf:58 Debug\wifi_uart.o: symbol _RX1_Buffer multiply defined (Debug\main.o)


     我把 wifi_uart.h 中    的 #include "stm8s.h"  注释掉:
   编译的时候 却 显示了 一大堆  缺少  ”;“  的 错误,  但实际是没有缺的

      #error cpstm8 inc\wifi_uart.h:20(0+7) missing ;


    我想 只把 下面句加到 wifi_uart.h 中
     编译的时候 也是报了 重复定义的错误!!!!
  • /*!< Unsigned integer types */
  • typedef unsigned char uint8_t;
  • typedef unsigned short uint16_t;
  • typedef unsigned long uint32_t;
  • typedef enum {FALSE = 0, TRUE = !FALSE} bool;

复制代码


        请问具体是该如何处理?


最后我向苍天保证  RX1_Buffer  只在 wifi_uart.h  中定义一次!!!!!! 苍天作证!!!!!

收藏 评论15 发布时间:2015-10-16 14:20

举报

15个回答
enjoyfreescal 回答时间:2015-10-16 16:41:58
su-409464 发表于 2015-10-16 16:04
我终于明白你的意思了!!!!

”数据定义应该在.c文件中定义,在.h文件中声明“

不需要,最简单的方法,如我之前说的,可以定义一个.c文件专门定义变量,同时定义相应.h文件声明相应变量,然后其他.c都包含该.h文件即可(如同你的stm8s.h文件一样,导出都需要)
dsjsjf 回答时间:2015-10-16 15:28:41
不要在头文件中定义变量
xuguomin 回答时间:2015-10-16 14:47:59
如果stm8s.h 是总头文件 应该在 "stm8s.h"包含wifi_uart.h
enjoyfreescal 回答时间:2015-10-16 14:30:04
上传工程看一下,还有就是数据定义应该在.c文件中定义,在.h文件中声明,否则多处调用.h会重复定义
enjoyfreescal 回答时间:2015-10-16 14:36:29
在.h文件加关键字extern:
extern uint8_t    RX1_Buffer[RX1_Lenth];
su-409464 回答时间:2015-10-16 14:36:31
enjoyfreescal 发表于 2015-10-16 14:30
上传工程看一下,还有就是数据定义应该在.c文件中定义,在.h文件中声明,否则多处调用.h会重复定义 ...

但是有些数据 不单单 这个 wifi_uart.c 要用到。


我的想法是  在wifi_uart.h 中 统一定义,   其他c 文件 要用到就调用一下 这个h 文件!!!


自己工程架构能力还是很差很不规范!!!

smartsocket_wifi.rar

下载

3.83 MB, 下载次数: 10, 下载积分: ST金币 -1

enjoyfreescal 回答时间:2015-10-16 14:38:08
su-409464 发表于 2015-10-16 14:36
但是有些数据 不单单 这个 wifi_uart.c 要用到。

那你可以建立一个.c专门负责数据的创建,和一个.h负责相应声明,其他.c文件调用即可。
xuguomin 回答时间:2015-10-16 14:44:55
不能包含 #include "stm8s.h"
enjoyfreescal 回答时间:2015-10-16 14:46:00
本帖最后由 enjoyfreescal 于 2015-10-16 14:49 编辑
su-409464 发表于 2015-10-16 14:36
但是有些数据 不单单 这个 wifi_uart.c 要用到。

E:\测试\smartsocket_wifi\inc\wifi_sys.h:14:uint8_t        RX1_Buffer[RX1_Lenth];        //接收缓冲 idata
E:\测试\smartsocket_wifi\inc\wifi_uart.h:18:uint8_t        RX1_Buffer[RX1_Lenth];        //接收缓冲 idata
你重复定义了!!还有你#include "wifi_uart.h"这个在main.c和wifi_uart.c都调用了,所以RX1_Buffer[RX1_Lenth];声明了两次
pwdzsj 回答时间:2015-10-16 15:10:23
有时候编译器版本不一样也会出现这种情况
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版