2012-12-18 54 views
0

我試圖在C.在「鑽石繼承」結構中是否可以#include?

一些項目,我想知道是否有可能使#include從同一個文件,在回憶鑽石遺產的方式。

交流轉換器
  • #include "a.h"b.c
  • #include "b.h"
  • b.h#include "a.h"

是否有可能#include "b.h" in a.c

我得到一個錯誤:

some_variable already defined in a.obj 
+1

尋找「包括衛士」 – cnicutar

+0

簡單:不*定義*變量在標題中,只需*聲明*它們。 –

+0

@PaulR你如何在頭文件中聲明'int'而不定義它? – SomeWittyUsername

回答

6

簡單:不定義頁眉變量,只是聲明他們:

頁眉:

// a.h 

#ifndef A_H    // always use #include guards 
#define A_H 

extern int my_variable; // declare my_variable 

... 

#endif 

源文件交流:

// a.c 

#include "a.h" 

int my_variable;  // define my_variable 

... 

源文件b.c:

// a.c 

#include "a.h" 
#include "b.h" 

... 

正如其他人所說,#包括守衛是有用的,和良好的習慣進入,但他們很可能不是這個具體問題的解決方案。

+0

我已經使用「#包括衛兵」,它沒有幫助,我會嘗試你的解決方案 – hudac

2

你有聲明extern變量,然後修改你的頭以下列方式:

#ifndef a_h 
#define a_h 

    //your a.h 

#endif 
+0

我已經使用「#包括衛兵」,它沒有幫助 – hudac