19 c++
我需要将静态数组放入.cpp文件中.此数组仅用于此.cpp,因此我想将其声明为静态.数组定义非常大,所以我自然要转发声明它.
static int bigIntArray[5000];
/* other code using bitIntArray */
static int bigIntArray[5000] = {
0x00, 0x9900, 0xffee,
...
};
Run Code Online (Sandbox Code Playgroud)
VC 9.0给出错误:错误C2086:'int bigIntArray [5000]':重新定义
如果我将'static'改为'extern',问题就会消失,但我不喜欢这个解决方案.
为什么我不能转发声明一个静态变量?这是C++标准所要求的吗?
D. *_* A. 28
冒回答稍微不同的问题的风险(Charles Bailey很好地回答了你的问题),你可能想要使用带有extern的匿名命名空间.这可以防止其他翻译单元访问该阵列.
namespace {
extern int bigIntArray[5000];
}
// Code that uses bigIntArray
namespace {
int bigIntArray[5000] = { ... };
}
Run Code Online (Sandbox Code Playgroud)
这可能符合您的需求.
CB *_*ley 25
如果使用extern关键字并且未指定初始化程序,则只能在C++中转发声明对象.声明对象的任何其他尝试也将是一个定义.这意味着前向声明的对象将具有外部链接.无法转发声明static对象,即具有内部链接的对象.
这与C不同,其中没有初始化程序的任何声明都是暂定定义,可以提供后续定义,但它们必须都指定相同的链接.
| 归档时间: |
|
| 查看次数: |
13924 次 |
| 最近记录: |