C头中的全局数组?
好吧,奇怪的问题时间C头中的全局数组?,c,arrays,visual-c++,global-variables,C,Arrays,Visual C++,Global Variables,好吧,奇怪的问题时间 我重构一些旧C++代码,声明一组数组,如:: static SomeStruct SomeStructArray[] = { {1, 2, 3}, {4, 5, 6}, {NULL, 0, 0} } 等等。它们分散在源文件中,并在声明它们的地方使用 但是,我希望将它们移动到单个源文件中(主要是因为我想出了一种自动生成它们的方法)。当然,我天真地尝试为他们制作一个标题: static SomeStruct SomeStructArray[]; 事实
我重构一些旧C++代码,声明一组数组,如::
static SomeStruct SomeStructArray[] = {
{1, 2, 3},
{4, 5, 6},
{NULL, 0, 0}
}
等等。它们分散在源文件中,并在声明它们的地方使用
但是,我希望将它们移动到单个源文件中(主要是因为我想出了一种自动生成它们的方法)。当然,我天真地尝试为他们制作一个标题:
static SomeStruct SomeStructArray[];
事实上,即使我知道这是错误的,但无论如何,编译器的错误是:
error C2133: 'SomeStructArray' : unknown size arrays.h
error C2086: 'SomeStruct SomeStructArray[]' : redefinition arrays.cpp
那么,我想,正确的方法是什么呢?如果要将数组本身都放在一个文件中(并且显然要从其他文件中访问它们),则需要从定义中删除
静态
(这使得它们只在同一个翻译单元(即文件)中可见)
然后,在标题中,您需要向每个声明添加一个extern
最后,当然,您需要确保当您有一个SomeStruct
数组时(例如),SomeStruct
的定义在您尝试定义数组之前是可见的。尝试使用
.h文件:
extern SomeStruct SomeStructArray[];
.cpp文件:
extern SomeStruct SomeStructArray[] = {
{1, 2, 3},
{4, 5, 6},
{NULL, 0, 0}
}
创建头文件并将其放入其中:
extern SomeStruct SomeStructArray[];
然后将现有代码放入源文件(而不是头文件):
缺点是,您无法在其他源文件中获取阵列的大小:
size_t size = sizeof SomeStructArray; // doesn't work in any source file apart
// from the one defining the array.
您可以添加额外的变量来解决这个问题
这是使用DevStudio2k5测试的。Ahhh。这是有道理的。还有,是的,我省略了代码中不相关的部分,因为它们是不相关的:)为什么数组本身上的
extern
?它不是从声明中得到了extern
'd吗?这不是真的,我的编译器(即使在标准一致性模式下)说:错误:“SomeStructArray”声明为“extern”,后来声明为“static”,啊,我知道我做了什么。我没有将声明数组的头包含在包含数组定义的源文件中。修好了。
size_t size = sizeof SomeStructArray; // doesn't work in any source file apart
// from the one defining the array.