我有一个文件test.cpp:
#include <stdio.h>
class B {
public:
B() {}
};
class A {
public:
A(B *b) {
b = b;
}
B *b;
};
int main() {
B b = B();
A a = A(&b);
printf("b: %p\n", &b);
printf("a.b: %p\n", a.b);
}
Run Code Online (Sandbox Code Playgroud)
编译下g++ -Wall -std=c++11 test.cpp并运行,给出结果:
b: 0x7fffc7e9fa6f
a.b: 0x7fffc7e9fb60
Run Code Online (Sandbox Code Playgroud)
我假设指针是直接为构造函数复制的,但是我们看到保存在类A实例中的值B已经改变了.
任何帮助将不胜感激!
编辑 - 关于此问题可能偏离主题的讨论:
我不认为这是一个"简单的印刷错误",因为在这种情况下,名称范围错误并不是立即显而易见的.
编辑编辑 - 很明显,这个问题已得到彻底解答,因此无需进一步回复.然而,如前所述,关闭"偏离主题"的原因值得商榷.
在b = b,两个都b出现了构造函数参数.该成员未被初始化.
解决方案:
A(B *b) : b(b) {}this->b| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |