我在某处读到可以在不指定大小的情况下在头文件中声明(全局)数组。像这样:

 // Header
 extern int MyArray[];

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


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

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

最佳答案

问题不在于您的声明或定义。问题是您尝试将sizeof应用于MyArray,尽管它的类型不完整(因为它的大小已被忽略)。

使用伴随变量存储大小可以解决一些麻烦:

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

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


现在,您可以在其他翻译单位中使用MyArraySize来确定MyArray的大小。

但是,不建议使用此方法,而建议仅给出数组的大小(或避免一起使用全局变量)。

10-05 21:10
查看更多