在函数c ++中更改时未保留类的公共变量
Posted
技术标签:
【中文标题】在函数c ++中更改时未保留类的公共变量【英文标题】:Public variables of class not being preserved when altered in function c++ 【发布时间】:2014-03-10 10:45:06 【问题描述】:我发现了一个与这个问题类似的问题,尽管其提出的方式比我认为我需要的更复杂(问题得分为 -2)。希望这会更容易理解。
事情的一般要点是所涉及的两个类是 GUI 和 Player(我在其他类的其他地方也遇到过同样的问题,但如果我能理解为什么这个不起作用,它应该适用于其余类) .
GUI 包括“Player.h”。 Player 类有一个公共布尔变量“hasBall”;当“播放器”被传递到函数 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;
如果有人能向我解释为什么会发生这种情况,我将不胜感激!如果需要任何额外的信息,请告诉我。
干杯:)
【问题讨论】:
【参考方案1】:您的函数会复制参数(它们按值传递),然后更改副本,而不是“原始”对象(在函数体中)。
你应该改变它以获取指针或引用,例如:
//-------------------v---------------v <---these are references
void GUI::Pass(Player& passer, Player& receiver)
当然,您也应该更改声明。
【讨论】:
太棒了,谢谢 :) 我意识到这是一个愚蠢的问题(基于反馈),所以我很欣赏一个可靠的答案。有时在互联网上很难找到,隐藏在更复杂的示例中。【参考方案2】:使用引用传递您的对象。
【讨论】:
【参考方案3】:考虑这个函数:
void someFunction (int j)
j = 8;
假设我们这样称呼它:
someFunction (3);
您是否认为someFunction
中的分配以某种方式使3
成为8
?你的期望毫无意义。如果没有某种特殊的安排,函数内部的赋值不可能改变调用者的值。
【讨论】:
"你是否认为 someFunction 中的赋值使 3 变成了 8?"我以前的错误理解会导致我得到肯定的答案。我会假设它相当于: int j = 3; j = 8;唉,我已经看到了我的方式的错误以上是关于在函数c ++中更改时未保留类的公共变量的主要内容,如果未能解决你的问题,请参考以下文章