当前位置:网站首页>头文件重复定义问题解决“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;
}
边栏推荐
- Async await used in map
- Redis入门完整教程:有序集合详解
- OSEK标准ISO_17356汇总介绍
- Redis introduction complete tutorial: Collection details
- Sword finger offer 65 Add without adding, subtracting, multiplying, dividing
- How can enterprises cross the digital divide? In cloud native 2.0
- Advanced area a of attack and defense world misc Masters_ good_ idea
- Unity Xiuxian mobile game | Lua dynamic sliding function (specific implementation of three source codes)
- 攻防世界 misc 高手进阶区 a_good_idea
- Sword finger offer 68 - I. nearest common ancestor of binary search tree
猜你喜欢
Attack and defense world misc advanced area Hong
Redis入门完整教程:客户端通信协议
Redis入门完整教程:Bitmaps
新版判断PC和手机端代码,手机端跳转手机端,PC跳转PC端最新有效代码
攻防世界 MISC 進階區 Erik-Baleog-and-Olaf
Attack and defense world misc master advanced zone 001 normal_ png
Redis入门完整教程:键管理
Serial port data frame
Redis introduction complete tutorial: slow query analysis
Redis démarrer le tutoriel complet: Pipeline
随机推荐
LabVIEW中比较两个VI
浅聊一下中间件
Redis入门完整教程:发布订阅
Hit the core in the advanced area of misc in the attack and defense world
Google Earth engine (GEE) - globfire daily fire data set based on mcd64a1
[Jianzhi offer] 6-10 questions
S32 Design Studio for ARM 2.2 快速入门
Redis getting started complete tutorial: hash description
攻防世界 MISC 进阶区 Erik-Baleog-and-Olaf
位运算符讲解
MP进阶操作: 时间操作, sql,querywapper,lambdaQueryWapper(条件构造器)快速筛选 枚举类
小程序vant tab组件解决文字过多显示不全的问题
A complete tutorial for getting started with redis: Pipeline
Sword finger offer 67 Convert a string to an integer
Redis introduction complete tutorial: client communication protocol
mamp下缺少pcntl扩展的解决办法,Fatal error: Call to undefined function pcntl_signal()
集群的概述与定义,一看就会
UML图记忆技巧
Async await used in map
Co create a collaborative ecosystem of software and hardware: the "Joint submission" of graphcore IPU and Baidu PaddlePaddle appeared in mlperf