【问题标题】:Public variables of class not being preserved when altered in function c++在函数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;
}

如果有人能向我解释为什么会发生这种情况,我将不胜感激!如果需要任何额外的信息,请告诉我。

干杯:)

【问题讨论】:

    标签: c++ function class variables public


    【解决方案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;唉,我已经看到了我的方式的错误
      猜你喜欢
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 2012-04-18
      • 2019-09-29
      • 1970-01-01
      相关资源
      最近更新 更多