社区
C语言
帖子详情
vc连接时报错:symbol“_xxxxxx”had been defined in cc_main.obj
floyd_idiot
2006-04-27 11:23:04
救急
!!!!!!!!!
...全文
227
12
打赏
收藏
vc连接时报错:symbol“_xxxxxx”had been defined in cc_main.obj
救急 !!!!!!!!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
铖邑
2006-04-28
打赏
举报
回复
楼上的,如果在头文件里定义了标识符的话,加上#ifndef #define是没有用的。那个只是用来避免同一个头文件被重复包含的。
比如,某个单元文件包含了a.h b.h,而a.h b.h都包含了c.h,该单元文件在包含a.h时已经隐含了c.h,所以在包含b.h时就发生了重复包含c.h的错误。你所说的那种解决办法只能用来解决这种情况下的问题。
楼主的问题可能是这样的:
这里只是举个例子吧
假设有个头文件a.h定义了这样的变量
#ifndef A_H
#define A_H
int BufferSize;
#endif
然后,假设有2个单元文件a1.cpp a2.cpp都包含了这个头文件,编译的时候,由于头文件是先合并到单元文件然后进行编译的,就等于说这2个单元文件实际上都有int BufferSize;这个定义。编译的时候没有问题,也没有发生重复包含的情况。但是链接的时候,链接器发现在a1 a2的目标文件中都有int BufferSize;这个定义,于是就报错。
所以,变量不要在头文件中定义,但是常量可以(编译器对常量做了专门的处理)。在这个例子中,我们可以在a1.cpp定义变量,然后在头文件中写上一行声明extern int BufferSize;,这样其它文件就可以引用这个变量了。
TERRYYRRET
2006-04-28
打赏
举报
回复
重复定义错误
三文鱼也会飞
2006-04-28
打赏
举报
回复
可以再头文件中加
#ifndef _XXXX_H
#define _XXXX_H
**********************
#endif
goodluckyxl
2006-04-27
打赏
举报
回复
是连接器
铖邑
2006-04-27
打赏
举报
回复
你在2个单元里面定义了同一个标识符,编译没有问题,但是链接的时候就会出现这种错误。一般,如果你在头文件里面定义标识符的话,因为可能多个单元文件包含了这个头文件,就会出现这种问题。你仔细检查一下你的代码看看。
goodluckyxl
2006-04-27
打赏
举报
回复
重复定义了_xxxxxx
连接时编译器发现了多具有外部连接的****就报了
xombat
2006-04-27
打赏
举报
回复
把程序贴出来看看,否则去看看动态帮助,里面有很详细解释。
json_001
2006-04-27
打赏
举报
回复
我猜是重复包含,呵呵。
贴一些东西,也许大家可以更明白。
wind19
2006-04-27
打赏
举报
回复
在那个头文件里用#pragma once
jiongdy
2006-04-27
打赏
举报
回复
重复包含头文件的问题
我也遇到过
仔细看一下
gjianpro
2006-04-27
打赏
举报
回复
重复包含头文件的问题
在你的每个头文件里都加上#pragma once就好了
三文鱼也会飞
2006-04-27
打赏
举报
回复
extern 类型的问题
找到有重复的变量 再前面加上extern
Error: L6200E:
Symbol
__stdout multiply
defined
(by stdio_streams.o and usart.o).
遇到问题: …\
OBJ
\LORA.axf: Error: L6200E:
Symbol
__stdout multiply
defined
(by stdio_streams.o and usart.o). 解决办法:勾选Use MicroLIB
Error: L6200E:
Symbol
__stdin multiply
defined
by stdio_streams.o 分析与解决
Error: L6200E:
Symbol
__stdin multiply
defined
(by stdio_streams.o and retarget.o). Error: L6200E:
Symbol
__stdout multiply
defined
(by stdio_streams.o and retarget.o). Not enough information to list image
symbol
s. Not enough information to list the image
STM32编译错误:…\
OBJ
\USART.axf: Error: L6200E:
Symbol
__stdout multiply
defined
STM32编译错误:…\
OBJ
\USART.axf: Error: L6200E:
Symbol
__stdout multiply
defined
(by stdio_streams.o and usart.o).
Symbol
__stdout multiply
defined
..\
OBJ
\Template.axf: Error: L6200E:
Symbol
__stdout multiply
defined
(by stdio_streams.o and usart.o).
关于..\
OBJ
\Template.axf: Error: L6200E:
Symbol
t multiply
defined
(by huidu.o and
main
.o).的问题
关于..\
OBJ
\Template.axf: Error: L6200E:
Symbol
t multiply
defined
(by huidu.o and
main
.o).的问题,仅供大家参考,只是一部分的原因,理性参考。 我自己定义了一个函数,而且在这个函数中用到了四个变量,当在
main
.c中定义了这些变量,又在huidu.c文件中定义了这些变量,就会出现下面的
报错
。 改正方法:将在huidu.c中需要的变量定义在void函数的前面,不要在huidu.h中再次定义,从网上查阅了别人其他说法(.
C语言
70,026
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章