g ++外部引用错误

时间:2009-09-10 10:01:58

标签: 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仍在那里。

提前感谢任何建议

2 个答案:

答案 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 ++'额外'