我的指针存在一些问题,我不确定是否搞砸了。
Class A{
...
}
Class B: public A{
...
X xInfo;
X getX();
}
Class X{
...
A *pointerToAType;
void setPointer(A *point);
}
所以我有一个B对象的实例化。
我有代码:
cout << "True Address: " << &bObj;
cout << "Address one: " << &bObj.getX().pointerToAType;
bObj.getX().setPointer(&bObj);
cout << "Address four: " << &bObj.getX().pointerToAType;
使用setPointer代码:
X::setPointer(A *pointer){
cout << "Address two: "<< pointerToAType;
pointerToAType = pointer;
cout << "Address three: "<< pointerToAType;
}
所以产出是: 真实地址:0xABCDEF 地址一:0 地址二:0 地址三:0xABCDEF 地址四:0
所以看起来好像我在方法中成功更新指针,但是一旦我离开方法,指针就会无效。 我很困惑为什么会发生这种情况以及如何强制指针保持指向。
我认为我正确地传递了地址的位置,并正确设置,所以它应该保留。但我的指针有点弱。
最低范例?:
//main.cpp
main(){
B bObj;
cout << "True Address: " << &bObj;
cout << "Address one: " << &bObj.getX().pointerToAType;
bObj.getX().setPointer(&bObj);
cout << "Address four: " << &bObj.getX().pointerToAType;
}
//b.cpp
B::getX(){return xInfo;}
//x.cpp
X::setPointer(A *pointer){
cout << "Address two: "<< pointerToAType;
pointerToAType = pointer;
cout << "Address three: "<< pointerToAType;
}
答案 0 :(得分:2)
您的getX
方法按值返回,因此您可以获得X
内B
的副本。您需要返回对X
。
Class B: public A{
...
X xInfo;
X& getX();
// ^ Return reference
}
此外,在打印指针时,不应使用&
。您想要打印指针的值,而不是指针的地址。
cout << "Address one: " << bObj.getX().pointerToAType;
// ^ No & here
答案 1 :(得分:2)
问题是在类B
方法X getX();
中返回对象X
的副本,这意味着每次调用bObj.getX()
时,新的X
对象提供。如果在其中一个重新调整的对象中设置了某些内容,则无关紧要,因为下次使用原始值返回新内容时。
X getX()
方法需要返回引用X& getX()