Ich bin ein neuer C++ Programmierer und habe schon einige Java gelernt. Ich mache meinen Auftrag. Und ich konnte einfach nichts von diesem Problem hören.Objektwert kann nicht geändert werden
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;
}
Wenn ich Visual Studio zum Debuggen verwende, sagt es mir, dass das Objekt den Gültigkeitsbereich verlassen hat. Wie löse ich es ...: - <. Bearbeiten Sie es in MWV.
Wenn Sie den Wert von der Aufruf-Site ändern möchten, müssen Sie als Referenz übergeben werden. – NathanOliver
@Peter Chen Zeigen Sie ein minimales nachprüfbares Beispiel. –
** Anders als in Java, in C++ - Objektnamen sind keine Referenzen unter der Haube. Sie übergeben eine Kopie des Objekts an 'Globle_scoop_function (A a)' (und wahrscheinlich an 'setTest'). Sie müssen sich über [C++ Referenzen] (https://en.wikipedia.org/wiki/Reference_ (C% 2B% 2B)) informieren und sie verwenden – mvidelgauz