2013-03-28 17 views
0

我讀過的地方可以在頭文件中聲明一個(全局)數組而不指定大小。事情是這樣的:頭文件中的全局數組...是否必須指定大小?

// Header 
extern int MyArray[]; 

// CPP file 
int MyArray[] = { 1, 4, 16, 512, 8192 }; 

但是,當我嘗試編譯,我得到的編譯器錯誤invalid application of 'sizeof' to incomplete type 'double []'

我錯過了什麼嗎?編譯器是否強制您在前向聲明的情況下指定數組大小?

回答

2

問題不在於您的聲明或定義。問題在於,您嘗試將sizeof應用於,儘管它具有不完整的類型(因爲它的大小已被忽略)。

有一個有點哈克的方式繞着它,用同伴變量存儲大小:

// Header 
extern int MyArray[]; 
extern size_t MyArraySize; 

// CPP file 
int MyArray[] = { 1, 4, 16, 512, 8192 }; 
size_t MyArraySize = sizeof(MyArray); 

現在你可以使用MyArraySize在其他翻譯單元來確定大小。但是,我不推薦使用這種方法,而只是給出數組的大小(或者全部避免使用全局變量)。

0

如果你不打算指定數組的大小,那麼你需要單獨跟蹤其當前大小和編譯器不會知道這個尺寸在編譯的時候,因此你不能用sizeof()

。 H:

extern int MyArray[]; 
extern size_t MyArrayLen; 

的.cpp:

int MyArray[] = { 1, 4, 16, 512, 8192 }; 
size_t MyArrayLen = 5; 
0

謝謝大家......這是我的錯實在的,我沒有注意到,從鱈魚的另一部分出現的錯誤e,在那裏打電話給sizeof(myArray)

相關問題