2013-01-19 29 views
0

爲什麼不能訪問file.cpp文件中定義的變量值。假設它與main鏈接。棘手的部分是變量值是間接包含的。主函數包含header1.h,其中包含file.h,其中的變量值爲extern。 可以EXTERN在報頭的鏈被傳播這樣頭文件層次結構中的extern變量

1)file.h

extern int value; 

2)file.cpp

#include "file.h" 
int value = 25; 

3)那麼header1.h

#include "file.h" 
const int const_value = 100; 

4)main.cpp

#include "header1.h" 
int main(char *argv[], int args) { 
int result = value*10;  
    return result; 
} 
+1

準確地說你會得到什麼錯誤?你確定file.cpp和main.cpp中的對象是否被賦予鏈接器? – aschepler

回答

1

是的,extern可以用這種方式傳播。編譯器只需要看到該變量在使用時被聲明爲extern,它通過哪個頭並不重要。頭文件的內容僅僅被預處理器粘貼在源文件的頂部。所以編譯器甚至不知道頭文件。

但是,最好將頭文件中獨立編譯源文件所需的所有頭文件包含在該頭文件中。維護這樣的代碼要容易得多。

簡單地說,包括file.hmain.cpp,它會更直觀的讀者的代碼。

+0

雖然這可能看起來像一般案例的合理建議,但我不相信它是,當你超越人爲的例子。 –

+0

@LightnessRacesinOrbit:我同意。總是有一個權衡。即使是標準庫頭文件也往往會間接包含很多頭文件。 –