对象值无法更改

时间:2016-08-18 13:30:07

标签: c++ oop variables object scope

我是一名新的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。

1 个答案:

答案 0 :(得分:1)

调用Globle_scoop_function(*this);会将*this深层副本带到函数参数a 对象超出Globle_scoop_function末尾的范围。对象*this保持不变。

一种方法是将原型更改为void Globle_scoop_function(A& a){。请注意&表示参考。然后,您可以修改a 中的main()该引用。

您的代码中A的所有各种实例都被称为a这一事实只会增加混乱。