C++ 外部数组定义
我想在不同的cpp文件中定义字符串数组,但当我试图使指针(数组元素)也为常量时,定义和声明之间似乎存在一些差异。使用与声明相同的定义似乎可以很好地工作,因此我怀疑初始化不是问题。在下面的代码中,我已经注释掉了有问题的const-因此它将被编译,但是如果const没有注释,链接器(使用g++4.6和VS10测试)将找不到ext_string_数组 main.cpp:C++ 外部数组定义,c++,arrays,constants,definition,extern,C++,Arrays,Constants,Definition,Extern,我想在不同的cpp文件中定义字符串数组,但当我试图使指针(数组元素)也为常量时,定义和声明之间似乎存在一些差异。使用与声明相同的定义似乎可以很好地工作,因此我怀疑初始化不是问题。在下面的代码中,我已经注释掉了有问题的const-因此它将被编译,但是如果const没有注释,链接器(使用g++4.6和VS10测试)将找不到ext_string_数组 main.cpp: #包括 常量字符*常量字符串数组[2]= { “aaa”, “bbb” }; 外部常量字符*/*常量*/ext_字符串_数组[2];
#包括
常量字符*常量字符串数组[2]=
{
“aaa”,
“bbb”
};
外部常量字符*/*常量*/ext_字符串_数组[2];// 在此上下文中,const还表示静态,除非您还指定extern。将您的.cpp文件更改为
extern const char* const ext_string_array[2] =
{
"aaa",
"bbb"
};
C++2003,3.5程序与链接,3:
具有命名空间范围(3.3.5)的名称如果是的名称,则具有内部链接
[……]
-显式声明为常量且既没有显式声明为extern也没有先前声明为具有外部链接的对象或引用;[……]
因此,在声明中需要显式的extern
const char* /*const*/ ext_string_array[2] = // <- offending const
{
"aaa",
"bbb"
};
extern const char* const ext_string_array[2] =
{
"aaa",
"bbb"
};