在头文件中用宏定义来避免重复包含,仍然会出现函数重定义的错误
来源:互联网 发布:淘宝小号出售 编辑:程序博客网 时间:2024/04/29 17:28
本博客转载于:http://blog.csdn.net/kkforwork/article/details/42679041
1. 在头文件包含中用了宏定义,还是会出现函数重定义的错误,表现为“error LNK2005: 已经在*.obj中定义“。
主要原因是在头文件中定义了函数。
因为对每个包含这个头文件的cpp文件而言,都要编译生成一个有这个函数实体的obj文件,对于单个文件而言没有重复定义。但对于整个工程而言,在链接的时候会因为有多个函数定义实体,而报错。
2. 为避免重复定义, 结构体的定义和静态数据的定义也不能放在头文件里?
把定义看成两种:类型定义,数据定义
类型定义不分配内存的,比如类的定义,结构体的定义,它是定义一个数据类型而已
数据定义分配内存,比如类对象定义,变量定义
一个原则:
不分配内存的,放在头文件
分配内存的放在cpp文件,放置重复定义
综上所述,你就可以知道结构体的定义属于类型定义放在头文件,静态数据的定义属于数据定义放在cpp文件
对于函数相同,函数声明你可以看作类型定义,函数实现看作数据定义
3. 另外,对于这一种错误,可以将定义在头文件里的函数定义成inline类型。
因为内联函数的代码会在任何调用它的地方展开。因此,不会出现链接时重定义的错误。
内联展开是在编译时进行的,只有链接的时候源文件之间才有关系。所以内联要想跨源文件必须把实现写在头文件里。如果一个inline函数会在多个源文件中被用到,那么必须把它定义在头文件中。
因此,内联函数一般只会用在函数内容非常简单的时候用。
0 0
- 在头文件中用宏定义来避免重复包含,仍然会出现函数重定义的错误
- 在头文件中用宏定义来避免重复包含,仍然会出现函数重定义的错误
- 关于头文件重复包含以及函数重定义问题
- 关于头文件重复包含以及函数重定义问题
- 关于头文件重复包含以及函数重定义问题
- 防止头文件的重复包含和编译及重定义错误(ifndef/define/endif 用法)
- C++中inline函数的定义可放在头文件中,inline 函数重复出现不会导致连接错误,
- 避免头文件的重定义
- 【原创】头文件、宏定义、条件编译、避免头文件重复包含
- .h头文件出现重定义错误
- C++头文件定义格式_避免重包含
- 避免变量重复定义和重复包含头文件的方法
- 函数放在头文件中被多次包含的重定义问题
- 如何避免重复宏定义?重定义错误
- 防止头文件重复包含的宏定义模板
- 头文件的重复包含和变量的重复定义
- 防止头文件重复包含引起的变量重复定义
- 头文件中定义全局变量出现重定义错误的解决方案
- 文字处理&排序-PAT.A1016
- 在linux环境中利用efibootmgr管理efi启动项[添加、删除、改变顺序]
- VideoView根据视频路径获取视频长度(播放前,同样适用于音频资源)
- Android 图片转Base64字符串
- cronolog 工具切分catalina.out
- 在头文件中用宏定义来避免重复包含,仍然会出现函数重定义的错误
- angularJs分页js基本写法
- iOS 生成通用 OpenSSL 库
- C# is as
- 为什么 APP 要用 token 而不用 session 认证?
- git 仓库搭建,clone和push
- Extjs中控件分隔符
- gSOAP使用
- POJ - 1611 The Suspects解题报告