【问题标题】:external array definition外部数组定义
【发布时间】:2011-11-01 19:41:46
【问题描述】:

我想在不同的 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];
}

定义.cpp:

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

【问题讨论】:

    标签: c++ arrays constants definition extern


    【解决方案1】:

    在这种情况下,const 也意味着静态,除非您还指定了 extern。将您的 .cpp 文件更改为此

    extern const char* const ext_string_array[2] =
    {
      "aaa",
      "bbb"
    };
    

    【讨论】:

      【解决方案2】:

      C++ 2003,3.5 程序和链接3

      具有命名空间范围 (3.3.5) 的名称如果是 [...]

      ——显式声明为 const 且既未显式声明 extern 也未先前声明具有外部链接的对象或引用; [...]

      所以你需要在声明中明确的extern..

      【讨论】:

        猜你喜欢
        • 2021-11-21
        • 2021-11-13
        • 1970-01-01
        • 1970-01-01
        • 2018-03-21
        • 2021-08-20
        • 2020-08-15
        • 2017-03-08
        相关资源
        最近更新 更多