外部数组定义

时间:2011-08-23 09:57:54

标签: c++ arrays const definition extern

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

main.cpp中:

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

definition.cpp:

const char* /*const*/ ext_string_array[2] = // <- offending const
{
  "aaa",
  "bbb"
};

2 个答案:

答案 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