【问题标题】:Linkage error of extern const stringextern const 字符串的链接错误
【发布时间】:2016-06-23 07:38:06
【问题描述】:

我遇到了以下链接问题。

在第一个编译单元中,我在全局空间 e 中定义 const string,如下所示:

const string test_string = "blahblah";

后来,在一个 2dn 编译单元中,我想重用该字符串,我写道:

extern string test_string;

但链接过程失败(未定义符号),我发现链接的唯一方法是使用const char* 而不是const string

我想知道为什么会这样?

【问题讨论】:

  • 您可以发布您正在使用的gcc 命令吗?

标签: c++ gcc visual-c++ hyperlink


【解决方案1】:

首先,stringconst string 是不同的类型。所以test_string 的两个声明永远不会匹配。

不过,还有一个问题。声明为 const 且未显式声明为 extern 的变量具有内部链接(这基本上意味着它是隐式的 static)。

通常,如果您想在翻译单元之间共享一个常量,您可以在标题中定义它并将其包含在所有翻译单元中;然后他们每个人都会得到自己的相同副本。

如果你真的想共享它的单个实例,你必须在第一单元定义它时标记外部链接变量:

extern const string test_string = "blahblah";

然后,您可以声明它以从第二个单元访问它:

extern const string test_string;

同样,不要忘记const,因为类型必须匹配。

至于为什么它适用于const char *;在那里,const 适用于指向的字符,而不是指针。所以指针本身具有正常的外部链接。如果你是 const char * const,你会得到与 string 相同的错误。

【讨论】:

  • 我实际上“失踪”const 是帖子中的一个错误,但无论如何你的答案真的很清楚!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
  • 2011-11-09
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 2021-11-23
相关资源
最近更新 更多