在某处我读到可以在头文件中声明(全局)数组而不指定大小。像这样:
// Header
extern int MyArray[];
// CPP file
int MyArray[] = { 1, 4, 16, 512, 8192 };
但是当我尝试编译时,我得到编译器错误invalid application of 'sizeof' to incomplete type 'double []'
。
我错过了什么吗?编译器是否强制您在前向声明的情况下指定数组大小?
答案 0 :(得分:2)
问题不在于您的声明或定义。问题是,您尝试将sizeof
应用于MyArray
,尽管它的类型不完整(因为它的大小已被遗漏)。
围绕它有一点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
的大小。
然而,我建议不要使用这种方法,只是给出数组的大小(或者一起避免全局变量)。
答案 1 :(得分:0)
如果你不打算指定数组的大小,那么你需要单独跟踪它的当前大小,编译器在编译时不会知道这个大小,因此你不能使用sizeof()
:
·H:
extern int MyArray[];
extern size_t MyArrayLen;
的.cpp:
int MyArray[] = { 1, 4, 16, 512, 8192 };
size_t MyArrayLen = 5;
答案 2 :(得分:0)
谢谢大家......这确实是我的错,我没有注意到错误来自代码的另一部分,其中有一个sizeof(myArray)
的调用。