以下 C++ 测试代码无法链接(gcc 4.9.2,binutils 2.25)。错误为In function 'main': undefined reference to 'X::test'
。
01: #include <string>
02: #include <iostream>
03:
04: namespace X
05: {
06: extern std::string test;
07: };
08:
09: using namespace X;
10: std::string test = "Test";
11:
12: int main()
13: {
14: std::cout << X::test << std::endl;
15: }
由于第09行的原因,我原本期望第10行定义了在第06行声明的X::test
变量。我认为实际上是在全局命名空间中声明并定义了一个不相关的test
变量,从而导致链接错误。
问题:请问有人能够解释一下我的期望为何不正确,以及到底发生了什么?
非答案:
- 我可以通过将第10行更改为
std::string X::test = "Test";
来进行链接。 - 我本来就不应该使用"using namespace"。
extern
中声明,它会在命名空间之外查找。它没有在命名空间内定义,编译器无法找到它,因此出现“未定义引用”的错误。请问您:为什么需要使用extern
? - wouter140extern
与“在命名空间外寻找某物”无关。它只是意味着“这个定义在别处(extern)”。 - DevSolar