头文件中的全局数组.是否必须指定大小?
Global array in header file... is it mandatory to specify the size?
我在某处读到可以在头文件中声明一个(全局)数组而不指定大小。像这样:
// 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
的大小。
但是,与其使用这个方法,我建议只给出数组的大小(或者避免全局变量)。
如果你不打算指定数组的大小,那么你需要单独跟踪它的当前大小,编译器在编译时不会知道这个大小,因此你不能使用sizeof()
:
. h:
extern int MyArray[];
extern size_t MyArrayLen;
. cpp:
int MyArray[] = { 1, 4, 16, 512, 8192 };
size_t MyArrayLen = 5;
谢谢大家…这确实是我的错,我没有注意到错误是由代码的另一部分引起的,那里有一个对sizeof(myArray)
的调用。
相关文章:
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 在设计 SDK 时,我是否应该在 C++ 头文件中完全隐藏内部类?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- 如何检查函数是否在LLVM Instrumentation pass的ModulePass的系统头文件中定义?
- 是否可以在没有真实文件的情况下创建 ifstream
- 是否可以使用 libclang python 解析 cpp 文件中没有标头的函数原型
- 在C++中使用没有合作伙伴Class/Cpp文件的头文件是否实用
- 是否可以使用 Python csv 阅读器读取使用 C++ std::setw 生成的文件?
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 是否可以在命令行中将输入参数传递给可执行文件
- 在头文件上包含 cpp 文件是否有缺点?
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 是否可以在文本文件中找到最长单词的长度,并在同一个文本文件中读取,只需 1 个 while 循环?
- 对同一文件使用 .read 的次数是否有限制?
- 如何检查流中文件的下一个单词是否为 alpha?
- 文件模式标志"ios::app"是否用于删除文件(如果文件已存在)?
- 使用 #include 将大量重复代码放入单独的文件中是否可以和/或正常?
- 如何检查文件是否已存在于 fstream C++中
- 是否有正确的方法对生成文件中的对象文件使用模板命令?(C++)