2012-11-12 55 views
1

第一頭文件錯誤C2065:未聲明的IDENTIFER在另一頭文件

//status.h file 
    static int A[2] = {1,2}; 

而另一頭文件

//anotherfile.h file 
#include "status.h" 

int GETID() 
{ 
    return A[1]; 
} 

使用變量時,我不斷收到錯誤,當我編譯說A是未聲明的標識符。我試圖將A定義爲extern const int,但仍然沒有幫助。在我的IDE(VS2010)中,當我將鼠標懸停在GETID()下的A值上時,我實際上可以看到A的內容。

我想使用A作爲全局數組,因爲在我的真實程序中,A是一個包含250個元素的數組,我不想在程序中聲明它多於一個地方。在這種情況下我能做些什麼來在另一個頭文件中使用數組A?

編輯:A不屬於任何類,其中GETID()是一個類函數。

回答

1

有一個以上的問題,您的設置。首先,如果事情真的如你所說的那樣,你不會從你的代碼中得到這個錯誤。你的代碼,你發佈它的方式是完全可編譯的,並且在那裏沒有「未聲明的標識符」問題。你實際得到這個錯誤的原因是你的頭文件的循環包含。直接或間接地,您設法將status.h納入anotherfile.h,並同時將anotherfile.h納入status.h。循環標題包含從不起作用。即使你用全局數組解決了你的主要問題,你仍然不得不擺脫循環頭文件的包含,因爲它稍後會以其他方式將頭部放回原處。其次,如果你需要一個真正的全球數組,即一個數組可以訪問整個程序,你必須聲明它與外部鏈接,而不是staticstatic聲明將產生大量完全獨立的數組,每個翻譯單元一個。

3

名稱空間範圍的static不是全局的 - 它是一個帶有內部鏈接的變量 - 它的一個副本將爲包含頭部的每個翻譯單元創建。你必須將其聲明爲extern,並在報頭使用包括守衛:現在只是#include "status.h"

//status.h file 
#ifndef STATUS_H 
#define STATUS_H 
extern int A[2]; 
#endif 

//status.cpp 
#include "status.h" 
int A[2] = {1,2} 

無論你想使用A,你。

注意int A[2] = {1,2,3};是非法的,因爲你說A只有2個值,但你給它3

+0

糟糕,因爲數組聲明錯誤。不過,我遵循你的建議,但它仍然有錯誤。我想指出我在另一個頭文件中使用A數組,而不是在status.cpp文件中。 – Fylix

+0

@Fylix你提到,這應該工作。如果沒有,那麼你發佈的代碼不是真實的。 –

+0

謝謝。爲了提問,我想我真的很簡單。我想是時候鑽研我的代碼了:) – Fylix

相關問題