工程链接时 出现重复定义问题!!!!
请问一个头文件 定义报错问题我自己定义了一个 wifi_uart.h 的文件, 文件中很多unsigned char和布尔变量要定义。
我调用了uin8_t和bool来定义, 如下:
[*]
[*]#ifndef _wifi_uart_H
[*]#define _wifi_uart_H
[*]
[*]#include "stm8s.h"
[*]/************* 本地变量声明 **************/
[*]uint8_t RX1_Buffer; //接收缓冲 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中定义一次!!!!!! 苍天作证!!!!!
su-409464 发表于 2015-10-16 16:04
我终于明白你的意思了!!!!
”数据定义应该在.c文件中定义,在.h文件中声明“
不需要,最简单的方法,如我之前说的,可以定义一个.c文件专门定义变量,同时定义相应.h文件声明相应变量,然后其他.c都包含该.h文件即可(如同你的stm8s.h文件一样,导出都需要) 不要在头文件中定义变量 如果stm8s.h 是总头文件 应该在 "stm8s.h"包含wifi_uart.h
上传工程看一下,还有就是数据定义应该在.c文件中定义,在.h文件中声明,否则多处调用.h会重复定义 在.h文件加关键字extern:
extern uint8_t RX1_Buffer;
enjoyfreescal 发表于 2015-10-16 14:30
上传工程看一下,还有就是数据定义应该在.c文件中定义,在.h文件中声明,否则多处调用.h会重复定义 ...
但是有些数据 不单单 这个 wifi_uart.c 要用到。
我的想法是在wifi_uart.h 中 统一定义, 其他c 文件 要用到就调用一下 这个h 文件!!!
自己工程架构能力还是很差很不规范!!!
su-409464 发表于 2015-10-16 14:36
但是有些数据 不单单 这个 wifi_uart.c 要用到。
那你可以建立一个.c专门负责数据的创建,和一个.h负责相应声明,其他.c文件调用即可。 不能包含 #include "stm8s.h" 本帖最后由 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; //接收缓冲 idata
E:\测试\smartsocket_wifi\inc\wifi_uart.h:18:uint8_t RX1_Buffer; //接收缓冲 idata
你重复定义了!!还有你#include "wifi_uart.h"这个在main.c和wifi_uart.c都调用了,所以RX1_Buffer;声明了两次
有时候编译器版本不一样也会出现这种情况:lol
页:
[1]
2