2014-02-12 27 views
1

我發現了一個類似於這個問題的問題,儘管放置的方式比我想的要複雜得多(問題得分爲-2)。希望這會更容易遵循。當在函數C++中改變時,類的公共變量不會被保留

事情的一般要點是涉及的兩個類是GUI和播放器(我在其他類中遇到了同樣的問題,但如果我能理解爲什麼這個不工作,它應該適用於其他類)。

GUI包含「Player.h」。類Player具有一個公共布爾變量'hasBall';當一個'Player'被傳遞給一個函數Pass()並且布爾值發生了變化時,它似乎只是一個臨時對象,因此不會更新正在傳遞的對象本身。請參見下面的代碼:

這工作得很好,布爾值Plyr1A和Plyr2A(在Gui.h定義)改變和保存

Plyr1A.hasBall = false; 
Plyr2A.hasBall = true; 

但是布爾值Plyr1A和Plyr2A保持與此相同。

Pass(Plyr1A,Plyr2A); //Boolean values for Plyr1A and Plyr2A remain the same with this. 

void GUI::Pass(Player passer, Player receiver) { 
    passer.hasBall = false; 
    receiver.hasBall = true; 
} 

如果任何人都可以向我解釋爲什麼會發生這種情況,我會很感激!如果有任何額外的信息需要讓我知道。

乾杯:)

回答

4

你的功能,使的參數(它們是由通過),然後改變副本,而不是「原始」的對象(在函數體)的副本。

你應該改變它採取的指針或引用,例如:

//-------------------v---------------v <---these are references 
void GUI::Pass(Player& passer, Player& receiver) { 

當然,你應該改變的聲明瞭。

+1

真棒謝謝:)我意識到這是一個nooby問題(根據反饋),所以我很欣賞一個堅實的答案。有時在互聯網上很難找到,隱藏在更復雜的例子中。 – nat1707828

1

使用引用來傳遞對象。

0

考慮一下這個功能:

void someFunction (int j) 
{ 
    j = 8; 
} 

,說我們這樣稱呼它:

someFunction (3); 

你想在someFunction分配不知何故使得該3成爲8?你的期望沒有意義。沒有某種特殊的安排,不可能是函數內部的賦值改變了調用者的值。

+0

「你是不是在想某些功能上的任務讓3變成了8?」 我以前的錯誤理解會讓我回答是的。我會假定它相當於: int j = 3; j = 8;唉,我看到了我的方式的錯誤 – nat1707828