是否可以#Include一个“钻石inheritance”结构?

我想用C做一些项目。

我想知道是否有可能从同一个文件中两次制作#include ,以一种回忆钻石遗产的方式。

  • ac中#include "ah"
  • bc中#include "bh"
  • bh中#include "ah"

是否可以在交流中 #include "bh"

我收到一个错误:

 some_variable already defined in a.obj 

简单:不要在头文件中定义变量,只需声明它们:

标题:

 // ah #ifndef A_H // always use #include guards #define A_H extern int my_variable; // declare my_variable ... #endif 

源文件ac:

 // ac #include "ah" int my_variable; // define my_variable ... 

源文件bc:

 // ac #include "ah" #include "bh" ... 

正如其他人所提到的,#include guards是有用的,也是一个很好的习惯,但它们可能不是解决这个特定问题的方法。

你要声明extern的变量 ,然后用以下方式修改你的头

  #ifndef a_h #define a_h //your ah #endif