以下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: }
Run Code Online (Sandbox Code Playgroud)
由于第09行,我期待第10行定义X::test
在第06行声明的变量.我相信test
在全局命名空间中声明和定义了一个不相关的变量,因此链接错误.
问题:有人可以解释为什么我的期望不正确,究竟发生了什么?
不是答案:
std::string X::test = "Test";
.有人可以向我解释下面的代码.
class InnerTest:
def __init__(self, value = 0):
self.value = value
class OuterTest:
def __init__(self, inner_test = InnerTest()):
self.inner_test = inner_test
a = OuterTest()
b = OuterTest()
a.inner_test.value = 42
print b.inner_test.value
Run Code Online (Sandbox Code Playgroud)
它打印42,我预计0.
我打算创建两个OuterTest实例,每个实例都包含一个不同的InnerTest实例.相反,我得到了两个引用同一个InnerTest实例的OuterTest实例.
还有什么是正确的方法来实现我想要的东西?