C头中的全局数组?

Mik*_*ron 4 c arrays global-variables visual-c++

好的,奇怪的提问时间!

我正在重构一些旧的C++代码,它声明了一堆数组,如下所示:

static SomeStruct SomeStructArray[] = {
    {1, 2, 3},
    {4, 5, 6},
    {NULL, 0, 0}
}
Run Code Online (Sandbox Code Playgroud)

等等.它们分散在源文件中,并在声明它们的地方使用.

但是,我想将它们移动到一个源文件中(主要是因为我想出了一种自动生成它们的方法).当然,我天真地尝试为他们制作标题:

static SomeStruct SomeStructArray[];
Run Code Online (Sandbox Code Playgroud)

实际上,即使我知道这是错的,但无论如何这里是编译错误:

error C2133: 'SomeStructArray' : unknown size    arrays.h
error C2086: 'SomeStruct SomeStructArray[]' : redefinition    arrays.cpp
Run Code Online (Sandbox Code Playgroud)

所以,我想,这是做正确的方法吗?

Jer*_*fin 8

如果你打算把这种阵列本身都在一个文件中(和显然是从其他文件访问它们),你需要删除static自定义(这使得他们只能在同一翻译单元(即文件)中可见).

然后,在标题中,您需要extern为每个声明添加一个.

最后,当然,当你有一个SomeStruct(例如)数组时,你需要确保SomeStruct在你尝试定义它们的数组之前可以看到它的定义.