0

在某处我读到可以在头文件中声明一个(全局)数组而不指定大小。像这样的东西:

 // Header
 extern int MyArray[];

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

但是当我尝试编译时,我得到了编译器错误invalid application of 'sizeof' to incomplete type 'double []'

我错过了什么吗?在前向声明的情况下,编译器是否强制您指定数组大小?

4

3 回答 3

2

问题不在于您的声明或定义。问题是您试图申请sizeofMyArray尽管它的类型不完整(因为它的大小已被忽略)。

有一个 hacky 方式围绕它,使用伴随变量来存储大小:

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

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

现在您可以MyArraySize在其他翻译单元中使用来确定MyArray.

但是,我建议不要使用这种方法,而是只给出数组的大小(或者避免一起使用全局变量)。

于 2013-03-28T11:22:24.857 回答
0

如果你不打算指定数组的大小,那么你需要单独跟踪它的当前大小,编译器在编译时不会知道这个大小,因此你不能使用sizeof()

。H:

extern int MyArray[];
extern size_t MyArrayLen;

.cpp:

int MyArray[] = { 1, 4, 16, 512, 8192 };
size_t MyArrayLen = 5;
于 2013-03-28T11:23:06.380 回答
0

谢谢大家......这确实是我的错,我没有注意到错误来自代码的另一部分,其中调用了sizeof(myArray).

于 2013-03-30T11:34:36.160 回答