vc连接时报错:symbol“_xxxxxx”had been defined in cc_main.obj

floyd_idiot 2006-04-27 11:23:04
救急





!!!!!!!!!
...全文
227 12 打赏 收藏 转发到动态 举报
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

70,026

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧