for-cycle通过未知大小的extern平面数组

时间:2015-01-20 15:02:01

标签: c++ arrays extern

我有一个包含以下代码的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文件超出了我的范围,我无法改变它。是否有解决方案,我对此表示怀疑。但也许我错过了一些明显而简单的东西。

1 个答案:

答案 0 :(得分:0)

单独

extern int global_values[] = {完全没有意义,因为它的长度在链接阶段丢失了。需要将其重写为extern int global_values[3];(在.h中)或添加了随附变量:extern int global_values_length = sizeof(global_values)/sizeof(int)

但是如果这个变量已经是extern,那么也许有人已经在外部使用它了,并且已经在某处定义了伴随变量。