2

我有在 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 仍然存在。

在此先感谢您的任何建议

4

2 回答 2

6

看起来你可能遇到了这个标准:

在 C 中,没有显式存储类说明符的文件范围内的 const 限定对象具有外部链接。 在 C++ 中,它具有内部链接。

将此更改为 2.cpp:

#include <string>
extern const std::string QWERTY("qwerty");

关于这个问题中“链接”的含义有更多详细信息 - What is external links and internal links in C++

于 2009-09-10T10:20:19.123 回答
0

我必须查一下,但我认为 const 全局变量在 C++ 中有内部链接,不要使用const它会编译得很好。

1.cpp

...
extern std::string QWERTY;
...

2.cpp
#include <string>
std::string QWERTY("qwerty");

或者,您当然可以在公共标头中将其声明/定义为 const 字符串。

在 2.cpp 中添加一个多余extern的部分也会让它编译,但我不确定这是标准的还是一些 g++ 的“额外”

于 2009-09-10T10:21:04.877 回答