c++ - g++ 外部引用错误

标签 c++ g++ declaration extern

我遇到了在 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/

相关文章:

JavaScript;如何声明全局变量?

c++ - 函数体中声明的名称的非限定名称查找

c++ - 如何在 C++ 代码中连接 sql server 数据库?

c++ - 使用 Boost 的数值绑定(bind)库编译 C++ 代码来求解 Ax=b 线性系统

c++ - C++ 中的 STL : no match for 'operator*'

c++ - 我的 C++ 代码在 MS C++ 编译器上运行完美,但在 g++ 编译器上给我 NaN。为什么?

c++ - 使结构接受任何类型而不是 float

c++ - 每个类类型的静态内存池对象

c++ - llvm g++ 和 boost 函数

c++ - g++ 解析错误 ":"