我想在不同的cpp文件中定义字符串数组,但是当我尝试使指针(数组元素)也是const时,似乎在定义和声明之间存在一些差异。使用与声明相同的定义似乎工作正常,所以我怀疑初始化不是问题。在下面的代码中,我已经注释掉了有问题的const - 所以它将被编译,但是如果const是未注释的,则链接器(使用g ++ 4.6& VS10测试)将找不到ext_string_array。
#include <iostream>
const char* const string_array[2] =
{
"aaa",
"bbb"
};
extern const char* /*const*/ ext_string_array[2]; // <- offending const
int main()
{
std::cout << string_array[0];
std::cout << ext_string_array[0];
}
const char* /*const*/ ext_string_array[2] = // <- offending const
{
"aaa",
"bbb"
};
答案 0 :(得分:3)
在此上下文中,const也表示静态,除非您还指定extern。将.cpp文件更改为此
extern const char* const ext_string_array[2] =
{
"aaa",
"bbb"
};
答案 1 :(得分:1)
C ++ 2003, 3.5程序和链接, 3 :
具有命名空间作用域(3.3.5)的名称具有内部链接(如果它的名称) [...]
- 显式声明为const的对象或引用,既未显式声明为extern,也未声明为具有外部链接; [...]
所以你需要在声明中明确extern
。