我有在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'

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top