#ifdef 用法的问题

allenmax 2009-05-09 09:35:06
有一个头文件test.h文件
#ifndef TEST_H
#define TEST_H
int a;
#endif
有两个类C1,C2。在c1类的头文件中include "test.h",
在类c2的头文件中include "test.h",include "C1.h",
在编译时 为什么还会显示
2.obj : error LNK2005: "int a" (?a@@3HA) already defined in 1.obj?
...全文
209 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fairchild811 2009-05-10
  • 打赏
  • 举报
回复
包含了test,就不用再包含C1了吧
pathuang68 2009-05-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lingyin55 的回复:]
由于工程中的每个.c文件都是独立的解释的,即使头文件有
#ifndef _TEST_H_
#define _TEST_H_
....
#enfif
在其他文件中只要包含了该变量所在的头文件就会独立的解释,然后每个.c文件生成独立的标示符。在编译器链接时,就会将工程中所有的符号整合在一起,由于文件中有重名变量,于是就出现了重复定义的错误。

这里说的很清楚
http://blog.chinaunix.net/u2/70445/showart_1330812.html
[/Quote]

分析得很精辟,加个#pragma once吧!
xempo 2009-05-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 operatingtuzi 的回复:]
头文件保护符可以防止该文件内出现重复定义

但假设有不同头文件a,头文件b包含a
a定义了变量i
编译得到得到a.obj b.obj 他们都含有i的定义 所以连接出现重定义


解决方案 定义在cpp文件
并在使用的文件做extern声明
[/Quote]结贴吧!
evilhacker 2009-05-09
  • 打赏
  • 举报
回复
似乎还有一种 #pragma once的方式
lpf000 2009-05-09
  • 打赏
  • 举报
回复
头文件中 不能定义变量
extern int a;//改成这样
smile_star 2009-05-09
  • 打赏
  • 举报
回复
两个头文件的包含顺序换一下试试
hw324306893 2009-05-09
  • 打赏
  • 举报
回复
luguo
woods2001 2009-05-09
  • 打赏
  • 举报
回复
是用来做测试的啊· ~
看不出有什么错误
lingyin55 2009-05-09
  • 打赏
  • 举报
回复
由于工程中的每个.c文件都是独立的解释的,即使头文件有
#ifndef _TEST_H_
#define _TEST_H_
....
#enfif
在其他文件中只要包含了该变量所在的头文件就会独立的解释,然后每个.c文件生成独立的标示符。在编译器链接时,就会将工程中所有的符号整合在一起,由于文件中有重名变量,于是就出现了重复定义的错误。

这里说的很清楚
http://blog.chinaunix.net/u2/70445/showart_1330812.html

  • 打赏
  • 举报
回复
不会,都在各自的作用域内,互不冲突。
lingyin55 2009-05-09
  • 打赏
  • 举报
回复
楼主你参考一下这个吧,打出来太长了

http://blog.chinaunix.net/u2/70445/showart_1330812.html
operatingtuzi 2009-05-09
  • 打赏
  • 举报
回复
头文件保护符可以防止该文件内出现重复定义

但假设有不同头文件a,头文件b包含a
a定义了变量i
编译得到得到a.obj b.obj 他们都含有i的定义 所以连接出现重定义


解决方案 定义在cpp文件
并在使用的文件做extern声明
woods2001 2009-05-09
  • 打赏
  • 举报
回复
int a; 用来做什么?

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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