File1.h,file2.h,file3.h,file4.h,file5.h,main.cpp
那么:file3.h包含file1.h,file2.h,file4.h包含file1.h,file2.h,file5.h包含file3.h,file4.h。如许就会导致在file5中对file1和file2的反复包含,编译时就会报错。
解决方法:
1:应用#ifndef
#define
#endif
即每个文件在定义时都写成以下情势(以file1.h为例):
#ifndefH_FILE1
#defineH_FILE1
#include
#include
…..
#endif
File3.h:#ifndefH_FILE3
#defineH_FILE3
#include
#include
#inlcude”file1.h”
#include”file2.h”
…..
#endif
方法二:在每个文件的头部定义:#pragmaonce(用于解释本文件中的内容只应用一次)
例:fiel1.h:
#pragmaonce
#include
#include
…..
File3.h:
#pragmaonce
#include
#include
#include”file1.h”
…..
这就是循环包含造成的错误Point.h 包含了AdvCircle.h,AdvCircle.h反过来又包含了Point.h
把Point.h里的#include "AdvCircle.h"去掉,改成class AdvCircle //声明一下就行了
同理把AdvCircle.h里的#include "Point.h" 去掉,改成 clsaa Point
在头文件里不要包含自己项目的其他头文件,只声明一下可能要用到的类就行了,只在cpp文件里用#include 包含自己项目的头文件
C++头文件重复互相包含,假设有两个类A和B,分别定义在各自的有文件A.h和B.h中,但是在A中要用到B,B中也要用到A,代码如下:
//文件A.h中的代码#pragma once
#include "B.h"
class B
class A
{
public:
B* b
}
//文件B.h中的代码
#pragma once
#include "A.h"
class B
class B
{
public:
A* a
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)