gpt4 book ai didi

c++ - extern const string 的链接错误

转载 作者:行者123 更新时间:2023-11-30 01:43:22 25 4
gpt4 key购买 nike

我遇到了以下链接问题。

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

const string test_string = "blahblah";

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

extern string test_string;

但是链接过程失败了(undefined symbol),我发现链接的唯一方法是使用 const char* 而不是 const string.

我想知道为什么会这样?

最佳答案

首先,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 相同的错误。

关于c++ - extern const string 的链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37985093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com