C++ 外部常量字符串的链接错误

C++ 外部常量字符串的链接错误,c++,gcc,visual-c++,hyperlink,C++,Gcc,Visual C++,Hyperlink,我遇到了以下链接问题 在第一个编译单元中,我在全局空间e中定义了一个const string,如下所示: const string test_string = "blahblah"; 后来,在一个2dn编译单元中,我想重用该字符串,并编写了: extern string test_string; 但是链接过程失败了(未定义的符号),我发现链接的唯一方法是使用const char*而不是const string 我想了解为什么会发生这种情况?首先,string和const string是不同的

我遇到了以下链接问题

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

const string test_string = "blahblah";
后来,在一个2dn编译单元中,我想重用该字符串,并编写了:

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


我想了解为什么会发生这种情况?

首先,
string
const string
是不同的类型。因此,
test\u string
的两个声明永远不会匹配

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

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

如果您确实想要共享它的单个实例,则在第一个单元中定义时,必须将变量标记为外部链接:

extern const string test_string = "blahblah";
然后,您可以声明它以从第二个单元访问它:

extern const string test_string;
同样,不要忘记
常量
,因为类型必须匹配


至于为什么它与常量字符一起工作*;在这里,
const
适用于指向的字符,而不是指针。因此指针本身具有正常的外部链接。如果您使用
const char*const

可以发布您正在使用的
gcc
命令吗?事实上,“missing”
const
是post中的一个错误,但是您的答案非常清楚!