【发布时间】:2016-08-18 13:30:07
【问题描述】:
我是一个新的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 进行调试时,它告诉我该对象已超出范围。我该如何解决... :-
【问题讨论】:
-
如果你想从调用站点修改值,你需要通过引用传递。
-
@Peter Chen 显示最小可验证示例。
-
不像在 Java 中,在 C++ 中的对象名称不是引擎盖下的引用。您正在将对象的副本传递给
Globle_scoop_function(A a)(并且可能传递给setTest)。你需要了解C++ references并使用它们 -
"我是一个新的c++程序员,之前学过一些java。"你有很多东西要忘记。 C++ 不是 Java,这是一件好事。
标签: c++ oop variables object scope