Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 外部数组定义_C++_Arrays_Constants_Definition_Extern - Fatal编程技术网

C++ 外部数组定义

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];

我想在不同的cpp文件中定义字符串数组,但当我试图使指针(数组元素)也为常量时,定义和声明之间似乎存在一些差异。使用与声明相同的定义似乎可以很好地工作,因此我怀疑初始化不是问题。在下面的代码中,我已经注释掉了有问题的const-因此它将被编译,但是如果const没有注释,链接器(使用g++4.6和VS10测试)将找不到ext_string_数组

main.cpp:
#包括
常量字符*常量字符串数组[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"
};