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

重复定义,怎么解决?

[复制链接]
zttx 提问时间:2015-11-30 17:02 /
我定义了一个头文件Var_Def.h
内容如下
#ifndef __VAR_DEF_H
#define __VAR_DEF_H

extern  uint16_t   SRC_Buffer[] = {0x8fff,0x8fff, 0x9fff, 0x9fff,0xbfff,0xbfff,
           0xbfff, 0xefff,0xbfff,0xbfff, 0x0000,0x0000};

#endif
我在两个.c文件中调用了这个头文件,总是提示Symbol SRC_Buffer multiply defined (by stm32f10x_it.o and main.o). 这个能怎么解决呀?
是不是我头文件中的定义格式不对?
收藏 1 评论18 发布时间:2015-11-30 17:02

举报

18个回答
那就地方 回答时间:2015-11-30 17:12:22
extern  uint16_t   SRC_Buffer[] = {0x8fff,0x8fff, 0x9fff, 0x9fff,0xbfff,0xbfff,0xbfff, 0xefff,0xbfff,0xbfff, 0x0000,0x0000};这些写法是错的;

想调用就这样写:extern  uint16_t   SRC_Buffer[12] ;

想定义申明就这样写:uint16_t   SRC_Buffer[] = {0x8fff,0x8fff, 0x9fff, 0x9fff,0xbfff,0xbfff, 0xbfff, 0xefff,0xbfff,0xbfff, 0x0000,0x0000};
天朝核心 回答时间:2017-12-15 16:31:02
本帖最后由 天朝核心 于 2017-12-15 16:33 编辑

比如我要调用delay函数 写了个delay.c和delay.h文件
1 要在delay.h文件里写一句 #include "delay.c"
2 声明你在delay.c里写的函数delay();
3 main.c里要写#include "delay.h"
4 最重要的一步 不要在工程里添加delay.c文件 经我检测 是因为delay.c和main.c是同一级别的了 所以提示重复定义
还有一点 main.c里包含的文件 都会成为main.c里的子文件 子文件也可以在工程里双击打开
Inked}TPNPF2~OA}R~4S99$M[UK7_LI.jpg
TRVNPPT%VW@_TD26GN%9QK1.png
zttx 回答时间:2015-11-30 18:24:39
#ifndef __VAR_DEF_H
#define __VAR_DEF_H

extern  uint16_t   SRC_Buffer[12];

#define  plas 99

#endif
我在别的文件中可以调用 plas, 可以编译通过,如果别的文件中访问SRC_Buffer这个变量,就提示
Undefined symbol SRC_Buffer (referred from stm32f10x_it.o). stm32f10x_it文件已经包含了这个头文件(ver_def.h)
全局变量要怎么定义呢?:'
wu1169668869 回答时间:2015-11-30 17:11:55
extern  uint16_t   SRC_Buffer[] ;
不用写后面的数据定义。
zttx 回答时间:2015-11-30 17:30:09
#ifndef __VAR_DEF_H
#define __VAR_DEF_H

extern  uint16_t   SRC_Buffer[12];



#endif
Undefined symbol SRC_Buffer (referred from stm32f10x_it.o).
改成上面的格式,编译提示上面的错误,没有定义,我在文件中怎么访问和设置这个变量?
creep 回答时间:2015-11-30 18:10:52
本帖最后由 creep 于 2015-11-30 18:12 编辑

Var_Def.c中定义变量:

  1. uint16_t   SRC_Buffer[] = {0x8fff,0x8fff, 0x9fff, 0x9fff,0xbfff,0xbfff,
  2.            0xbfff, 0xefff,0xbfff,0xbfff, 0x0000,0x0000};
复制代码


Var_Def.h中声明变量:
  1. extern  uint16_t   SRC_Buffer[12];
复制代码

头文件stm32f10x_it.h包含头文件Var_Def.h
yanhaijian 回答时间:2015-11-30 18:45:33
wu1169668869 发表于 2015-11-30 17:11
extern  uint16_t   SRC_Buffer[] ;
不用写后面的数据定义。

正解的。
埃斯提爱慕 回答时间:2015-11-30 18:52:44
提示: 作者被禁止或删除 内容自动屏蔽
wu1169668869 回答时间:2015-11-30 18:54:21
感觉楼主没有把c文件添加到工程里面?
zttx 回答时间:2015-11-30 19:32:51
谢谢大家,我把c文件加进去就可以了。
小强-2027634 回答时间:2015-11-30 20:48:01
wu1169668869 发表于 2015-11-30 18:54
感觉楼主没有把c文件添加到工程里面?

神预测啊
moyanming2013 回答时间:2015-11-30 20:54:13
你能搞清楚什么是:
1.定义?
2.声明?
3.赋值?
4.初始化?
huaiqiao 回答时间:2015-12-1 09:05:37
那就地方iv 发表于 2015-11-30 17:12
extern  uint16_t   SRC_Buffer[] = {0x8fff,0x8fff, 0x9fff, 0x9fff,0xbfff,0xbfff,0xbfff, 0xefff,0xbfff ...

对的,支持板凳的回答。
飞狼老大 回答时间:2015-12-1 09:50:39
extern  uint16_t   SRC_Buffer[12]; 这个要放C文件,别放头文件里面!
星辰一方 回答时间:2015-12-1 10:32:35
楼上正解!变量定义不要放在头文件中!
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版