C++多文件编译,如果两个头文件都需要包含另一个头文件,而这两个头文件又要被第四个文件包含,怎么办

就有点类似于钻石继承(菱形继承) 比如有 a.h b.h c.h和d.h四个头文件 其中,b和c需要#include"a.h" 而d需要#include"b.h" #include"c.h" 这样编译的时候肯定会报错,因为d包含了两次a.h,请问各位技术大牛这个情况该如何解决 #ifndef #define ... #endif对此并不起作用

假如你现在有 a.h b.h c.h三个头文件,A B C三个程序都要调用
这时候你可以这样,比如A B C三个程序都要用到#include <string>那么他们的头文件里你可以这样写
#ifndef STRING_ABC_H
#define STRING_ABC_H
#include <string>
#endif
这样当编译器第一次编译string的时候就已经定义宏了。。下次遇到同样的宏就会跳过
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-12-09
#ifndef #define ... #endif
应该可以的啊,你头文件要用大写的。用A_H别用a.h
第2个回答  推荐于2018-04-23
#ifndef #define ... #endif对此肯定起作用的(只要定义得当)。
理论上,同一个头文件#include多次是没关系的,只要头文件符合标准并使用了#ifndef #define ... #endif进行控制。
所以你应该是还有别的问题。
如果可以的话,我需要看一下你的各个头文件,才能确定具体的问题所在。
你先要确保:
#ifndef #define ... #endif格式正确:
#ifndef _A_XXXX_H_ /* 这个名称只要不重复是无所谓的 */
#define _A_XXXX_H_ /* 要和上面的一样 */
...
#endif本回答被提问者和网友采纳

C++两个头文件互相包含对方,编译无法通过怎么办
这是因为头文件只能包含一次,可以用宏定义来解决这个问题。在你的Line和Point两个.h文件中分别加入下面的代码:\/\/Line.h#ifndef _LINE_H#define _LINE_H\/\/ 你自己的代码#endif\/\/---\/\/ Point.h#ifndef _POINT_H#define _POINT_H\/\/ 你自己的代码#endif 其次,如果是VC,在这两个头文件最开...

C++中,两个头文件互相引用怎么办
两个头文件相互包含会导致超前引用的问题,所谓超前引用是指一个类型在定义之前就被用来定义变量和声明函数,发生这种情况是无法编译通过的,不过可以采取一些手段解决该问题。超前引用导致的错误有以下处理办法:使用类声明,在超前引用一个类之前,首先用一个特殊的语句说明该标识符是一个类名,即将被超前...

c++基本语言
比如,如果有两个头文件都定义了ASPECT_RATIO, 而一个CPP文件又同时包含了这两个头文件,那么就会造成冲突。更难查的是另外一种错误,比如有如下的代码: \/\/ in header file def.h #define Apple 1 #define Orange 2 #define Pineapple 3 … \/\/ in some cpp file that includes the def.h enum Colors {W...

c++问题,如果我对头文件进行多次包含会因为名字重复而出错吗?
若C同时使用A B对象,则只用包含B的头文件即可

c++ 多源文件问题
因为在main函数里声明的void fun(void)是在fun.cpp中定义的。而头文件只是为了给共用的代码部分提供维护上的方便和接口上的定义,并不是必须。c语言编译器的最终操作对象是预处理以后的源文件。c语言的源文件最终的目的都是要编译成.obj(unix环境下是.o)件的,也就是目标文件。这个时候main里面有...

C\/C++头文件以及避免头文件包含造成的重定义方法
C\/C++编程中,头文件是关键元素,它们包含了函数声明、宏定义等,用于多个源文件共享。标准做法是将常量、宏、全局变量和函数原型写在头文件中,通过预处理指令#include引用。头文件包含时要特别注意,避免多次引用导致的重复内容,通常采用条件编译(如#ifndef...#define...#endif结构)来包裹整个头文件...

c++多文件结构的头文件怎么弄?每个cpp文件都要写头文件吗?
也可以不这样 ,也可以几个共用一个头文件; 但是 ,在复杂程序中 ,为了方便找到相关的 ,声明以及函数体一般是一个CPP对应一个.h头文件,在修改了相关函数之后就不用在头文件中到处找相关声明了 例:Test.cpp对应Test.h;Open.cpp对应Open.h;那么必须在相应的cpp文件中预提示相应的头文件;在...

C++在两个 .h头里定义两次重复的类型 怎么解决?
这个得具体看两个结构是否完全一致,若有不一致的话,不能注释掉,否则会有问题 另外,若真出现这样的情况,使用结构时加上引用全名吧

【C++必学】将一个cpp源码文件拆分成多个文件
"detector_utils.h"是一个头文件,其内容包含了所有在"detector_utils.cpp"中实现的函数声明。在这个文件中,我们声明了函数的签名信息,但并不包含任何函数的实现代码。这样,其他需要使用这些函数的cpp文件就可以通过包含"detector_utils.h"来获取函数的声明。在实际操作中,我们还需要注意避免在头文件中...

用C++写了两个CPP文件,其中一个生成Child.exe,另个CPP使用GreateProcess...
cpp是实现文件 应该还有个头文件 .h 在已经编译的代码中载入这个头文件 就可以实现了 .h和.cpp都必须复制到你现在编译的那个文件夹 然后再添加类 从文件中找到就可以了

相似回答