当前位置:网站首页>头文件重复定义问题解决“C1014错误“
头文件重复定义问题解决“C1014错误“
2022-07-04 22:37:00 【编程小段】
比如现在有三个文件,两个头文件,一个.cpp文件
header1.h
#include "header2.h"
int fun2();
header2.h
#include "header1.h"
int fun();
main.cpp
#include "header1.h"
int main()
{
return 0;
}
编译器在预处理过程会进行头文件替换,最终形成以下代码,头文件1包含头文件2,头文件2又包含头文件1,互相嵌套,这是编译器就会报报错“C1014 包含文件太多: 深度 = 1024 ”
#include "header1.h"
...
int fun();
int fun2();
int main()
{
return 0;
}
解决办法有两种:
- 一种是
#ifndef
解决
但这种名字是自定义的,可能会存在相同的时候,例如两个文件同时写成了HEADER_1
,这样就会少包含一组头文件,所以建议采用第二种
header1.h
#ifndef HEADER_1
#define HEADER_1
#include "header2.h"
int fun2();
#endif
header2.h
#ifndef HEADER_2
#define HEADER_2
#include "header1.h"
int fun();
#endif
main.cpp
#include "header1.h"
int main()
{
return 0;
}
经过头文件展开后
#define HEADER_1
#define HEADER_2
#ifndef HEADER_1
#define HEADER_1
#include "header2.h"
int fun2();
#endif
int fun();
int fun2();
int main()
{
return 0;
}
- 另一种是采用
#pragma once
这样实现的原理是,内部会有一个计数,表示这个头文件只会被展开一次
header1.h
#pragma once
#include "header2.h"
int fun2();
header2.h
#pragma once
#include "header1.h"
int fun();
main.cpp
#include "header1.h"
int main()
{
return 0;
}
边栏推荐
- Redis getting started complete tutorial: Geo
- Attack and defense world misc advanced area Hong
- JS 3D explosive fragment image switching JS special effect
- ETCD数据库源码分析——处理Entry记录简要流程
- Google Earth engine (GEE) - globfire daily fire data set based on mcd64a1
- P2181 对角线和P1030 [NOIP2001 普及组] 求先序排列
- Redis入门完整教程:哈希说明
- UML图记忆技巧
- Redis入门完整教程:GEO
- UML diagram memory skills
猜你喜欢
【图论】拓扑排序
Attack and defense world misc advanced grace-50
MYSQL架构——逻辑架构
Analysis of the self increasing and self decreasing of C language function parameters
Redis入门完整教程:初识Redis
Redis introduction complete tutorial: detailed explanation of ordered collection
VIM editor knowledge summary
集群的概述与定义,一看就会
Qt个人学习总结
Duplicate ADMAS part name
随机推荐
字体设计符号组合多功能微信小程序源码
Pagoda 7.9.2 pagoda control panel bypasses mobile phone binding authentication bypasses official authentication
图片懒加载的原理
Redis入门完整教程:慢查询分析
Wechat official account solves the cache problem of entering from the customized menu
colResizable. JS auto adjust table width plug-in
Attack and Defense World MISC Advanced Area Erik baleog and Olaf
C语言快速解决反转链表
[Lua] Int64 support
Redis入门完整教程:事务与Lua
新版判断PC和手机端代码,手机端跳转手机端,PC跳转PC端最新有效代码
MYSQL架构——逻辑架构
How to send a reliable request before closing the page
剑指 Offer 65. 不用加减乘除做加法
【机器学习】手写数字识别
The solution to the lack of pcntl extension under MAMP, fatal error: call to undefined function pcntl_ signal()
Redis introduction complete tutorial: Collection details
Taobao commodity review API interface (item_review get Taobao commodity review API interface), tmall commodity review API interface
Redis入門完整教程:Pipeline
剑指 Offer 67. 把字符串转换成整数