外部常量字符串的链接错误
Linkage error of extern const string
我遇到了以下链接问题。
在第一个编译单元中,我在全局空间 e 中定义如下const string
:
const string test_string = "blahblah";
后来,在 2dn 编译单元中,我想重用该字符串,我写道:
extern string test_string;
但是链接过程失败(未定义的符号),我发现链接的唯一方法是使用const char*
而不是const string
.
我想了解为什么会这样?
首先,string
和const 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
相同的错误。
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- Visual Studio mkl_link_tool.exe链接错误
- C++ 实现模板单例类时出现链接错误
- 使用类模板的方法链接错误
- MySQL C++连接器链接错误
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 运行 C++ 单元测试时LNK2005链接错误
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 链接错误,包括我创建的相同头文件 - C++
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 使用标头保护的多个定义链接错误
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 升压program_options中的链接错误
- 使用 g++ 预处理器进行替换会导致链接错误
- 在调试配置中编译工作正常,但发布会给出链接错误
- 相邻矩阵设置链接错误
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++链接错误,我理解但无法解决
- 是什么导致macOS Mojave上的GoogleTest链接错误