题
我有在g ++上重现的问题。 VC ++不会遇到任何问题。 所以我有2个cpp文件:
1.cpp:
#include <string>
#include <iostream>
extern const std::string QWERTY;
int main()
{
std::cout << QWERTY.c_str() << std::endl;
}
2.cpp:
#include <string>
const std::string QWERTY("qwerty");
没有魔力,我只想将字符串常量放入分隔文件中。在链接时,ld产生错误:“对_QWERTY'的未定义引用” 第一种想法是将两个声明都包装成“extern”C“&quot;” - 没有帮助。错误和非c ++ _QWERTY仍在那里。
提前感谢任何建议
解决方案
看起来你可能正在遇到这个标准:
在C中,文件中的const限定对象 没有明确存储的范围 类说明符具有外部链接。 在C ++中,它具有内部链接。
将此更改更改为2.cpp:
#include <string>
extern const std::string QWERTY("qwerty");
有关“联动”的更多细节。意思是这个问题 - C ++中的外部链接和内部链接是什么。
其他提示
我必须查找它,但我认为const全局变量在C ++中有内部链接,不要使用 const
,它会编译好。
1.cpp
...
extern std::string QWERTY;
...
2.cpp
#include <string>
std::string QWERTY("qwerty");
或者你可以在公共标题中声明/定义它作为常量标题。
向2.cpp添加多余的 extern
也会使它编译,但我不确定是标准还是某些g ++'extra'
不隶属于 StackOverflow