我有一个包含以下代码的cpp文件:
extern int global_values[] = {60, 67, 70};
我有另一个cpp文件,其中包含以下内容:
extern int global_values[];
for (auto i: global_values) // or any other type of for loop
{
// ... do something
}
当我尝试编译时,我收到以下错误:an array of unknown size cannot be used in a range-based for statement
。我知道问题是什么,我理解远远落后于编译器最终会想要调用类似sizeof(global_values)/sizeof(int)
之类的东西来获取步骤数但第一项未知。我的问题是如何解决它。最糟糕的是 - 第一个带有数组定义的cpp文件超出了我的范围,我无法改变它。是否有解决方案,我对此表示怀疑。但也许我错过了一些明显而简单的东西。
答案 0 :(得分:0)
extern int global_values[] = {
完全没有意义,因为它的长度在链接阶段丢失了。需要将其重写为extern int global_values[3];
(在.h中)或添加了随附变量:extern int global_values_length = sizeof(global_values)/sizeof(int)
。
但是如果这个变量已经是extern,那么也许有人已经在外部使用它了,并且已经在某处定义了伴随变量。