我有在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“” - 没有帮助。错误和非c ++ _QWERTY仍在那里。
提前感谢任何建议
答案 0 :(得分:6)
看起来你可能正在遇到这个标准:
在C中,文件中的const限定对象 没有明确存储的范围 类说明符具有外部链接。 在C ++中,它具有内部链接。
将此更改更改为2.cpp:
#include <string>
extern const std::string QWERTY("qwerty");
关于“联系”在这个问题中的含义还有更多细节 - What is external linkage and internal linkage in C++。
答案 1 :(得分:0)
我必须要查找它,但我认为const全局变量在C ++中有内部链接,不要使用const
并且编译正常。
1.cpp
...
extern std::string QWERTY;
...
2.cpp
#include <string>
std::string QWERTY("qwerty");
或者你可以在公共标题中声明/定义它作为常量标题。
向2.cpp添加一个多余的extern
也会让它编译,但我不确定是标准还是某些g ++'额外'