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对此并不起作用

第1个回答  2012-12-11
  用 #pragma once 吧, 其实 #ifndef #define ... #endif 也可以的,不过我没测试
a.h文件:
  #pragma once
  #define testA 12
  class CclassA
  {
  public:
   CclassA(void);
  public:
   ~CclassA(void);
  };

b.h文件:
  #pragma once
  #include "CclassA.h"
  #define koko 1

  class CclassB
  {
  public:
   CclassB(void);
  public:
   ~CclassB(void);
  };

c.h文件:
  #pragma once
#include "CclassA.h"
  #define kokoko 1
  class CclassC
  {
  public:
   CclassC(void);
  public:
   ~CclassC(void);
};

  

d.h文件:
#pragma once
#include "CclassB.h"
#include "CclassC.h"

#define DDDD 2
  class CclassD
  {
  public:
   CclassD(void);
  public:
   ~CclassD(void);
  };

最后编译没问题的:
正在编译...
1>includetest.cpp
1>CclassA.cpp
1>CclassB.cpp
1>CclassC.cpp
1>CclassD.cpp
1>正在生成代码...
1>正在编译资源清单...
1>正在链接...
1>LINK : 没有找到 D:\test\koko\includetest\Debug\includetest.exe 或上一个增量链接没有生成它;正在执行完全链接
1>正在嵌入清单...
1>生成日志保存在“file://d:\test\koko\includetest\includetest\Debug\BuildLog.htm”
1>includetest - 0 个错误,0 个警告
========== 全部重新生成: 1 已成功, 0 已失败, 0 已跳过 ==========本回答被提问者采纳
第2个回答  2012-12-14
#ifndef _A_H
#define _A_H
/* some declaration */
...

#endif

这个肯定可以用。但注意一点,.h 文件中,不要放全局变量,就是只有一个CPP文件引用此.h文件,也最好不要放。把全局量放在.cpp文件中,在.h中去声明。本回答被网友采纳

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都必须复制到你现在编译的那个文件夹 然后再添加类 从文件中找到就可以了

相似回答