好的,奇怪的提问时间!
我正在重构一些旧的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
所以,我想,这样做的正确方法是什么?
答案 0 :(得分:8)
如果您要将数组本身全部放在一个文件中(并且显然可以从其他文件访问它们),您需要从定义中删除 static
(这使得它们成为可能)仅在同一翻译单元(即文件)内可见。)
然后,在标题中,您需要为每个声明添加extern
。
最后,当然,你需要确保当你有一个SomeStruct
数组时(例如),在你尝试定义一个数组之前,SomeStruct
的定义是可见的。它们。
答案 1 :(得分:0)
尝试使用
.h文件:
extern SomeStruct SomeStructArray[];
.cpp文件:
extern SomeStruct SomeStructArray[] = {
{1, 2, 3},
{4, 5, 6},
{NULL, 0, 0}
}
答案 2 :(得分:0)
创建一个头文件并将其放入其中:
extern SomeStruct SomeStructArray[];
然后将现有代码放入源文件(不是头文件):
SomeStruct SomeStructArray[] = {
{1, 2, 3},
{4, 5, 6},
{NULL, 0, 0}
}
缺点是,你无法在其他源文件中获得数组的大小:
size_t size = sizeof SomeStructArray; // doesn't work in any source file apart
// from the one defining the array.
你可以添加额外的变量来解决这个问题。
这是使用DevStudio2k5测试的。