我遇到了在 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 仍然存在。
预先感谢您的任何建议
最佳答案
看起来您可能遇到了这个标准:
In C, a const-qualified object at file scope without an explicit storage class specifier has external linkage. In C++, it has internal linkage.
对 2.cpp 进行此更改:
#include <string>
extern const std::string QWERTY("qwerty");
在这个问题中,有一些关于“链接”含义的更多细节 - What is external linkage and internal linkage in C++ .
关于c++ - g++ 外部引用错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1404394/