社区
C++ 语言
帖子详情
#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?
...全文
208
13
打赏
收藏
#ifdef 用法的问题
有一个头文件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?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
一叶还真不知秋
2009-05-09
打赏
举报
回复
不会,都在各自的作用域内,互不冲突。
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; 用来做什么?
#if
def
,#else,#endif和#ifn
def
的
用法
本文详细介绍了C++中#
def
ines、#if
def
、#ifn
def
、#if等预处理命令的
用法
,包括如何在特定头文件、程序库和其他文件版本有关的代码中使用#if
def
指示符。此外,文章还探讨了使用这些命令时可能出现的
问题
及解决方法,如重复定义错误、头文件被多次包含等。
#if
def
,#else,#endif,#if
用法
详解(转)
本文深入解析预处理命令,包括 #if
def
, #ifn
def
, #if 的
用法
及注意事项,特别关注它们在C/C++中的作用与实践案例,同时探讨了头文件的正确引用方式以避免重复定义
问题
。
#if
def
、#ifn
def
、#if
def
ined、#if !
def
ined和#un
def
本文深入探讨了C语言中宏定义的使用,包括条件编译指令如#if
def
、#ifn
def
、#endif的
用法
,以及如何避免文件重复包含等
问题
。通过实例讲解了宏定义在实际编程中的应用。
#if和#if
def
的区别
本文深入探讨了C语言中预处理器指令的使用,重点讲解了#if、#if
def
与#
def
ine的
用法
及其在解决头文件重复包含
问题
上的应用。通过实例分析,帮助开发者理解并正确运用这些指令。
关于#if
def
#ifn
def
本文详细解析了C语言预处理指令#if
def
和#ifn
def
的
用法
。通过具体实例展示了如何利用这些指令进行条件编译,实现代码模块的选择性编译,有效避免重复定义的
问题
,特别适用于嵌入式系统的开发。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章