我是一名新的c ++程序员,之前已经学过一些java。我做我的任务。我只是无法听到这个问题。
class A{
private:
bool test;
public:
void anotherSetTest();
void setTest();
A();
};
void Globle_scope_function(A a){
a.setTest(true);
}
A::A(){
test = false;
}
void A::setTest(bool foo){
test = foo;
}
void A::anotherSetTest(){
Globle_scope_function(*this);
}
int main(){
A a;
a.anotherSetTest();
cout<<a.getTest()<<endl;//It suppose to output true, but why does it output false.
system("pause");
return 0;
}
当我使用visual studio进行调试时,它会告诉我该对象已超出范围。我该如何解决......: - &lt; 。将其编辑为MWV。
答案 0 :(得分:1)
调用Globle_scoop_function(*this);
会将*this
的深层副本带到函数参数a
。 对象超出Globle_scoop_function
末尾的范围。对象*this
保持不变。
一种方法是将原型更改为void Globle_scoop_function(A& a){
。请注意&
表示参考。然后,您可以修改a
中的main()
到该引用。
您的代码中A
的所有各种实例都被称为a
这一事实只会增加混乱。