被调用的方法不适用于C ++

时间:2013-07-22 12:38:44

标签: c++ class object codeblocks

我有一个名为woodyard的班级。里面有一个名为collect_wood的方法。它的参数是Player对象。每次调用时,该方法都会向player.wood_resource添加1。

我在这个主要使用它:

for(int i = 0; i < woodyards.size(); i++)
{
  woodyards[i].collect_wood(p1);
}

p1是玩家对象。

这是collect_wood方法:

void woodyard::collect_wood(Player player)
{
  player.wood_resource++;
}

运行时wood_resource没有效果。 请帮忙。我使用CodeBlocks在C ++中编码

3 个答案:

答案 0 :(得分:8)

你应该在这里使用参考。

void woodyard::collect_wood(Player& player)
{
  player.wood_resource++;
}

因为在你的情况下 - 你增加wood_resource副本。

答案 1 :(得分:0)

以参考呼叫方式进行。您的代码执行的操作,每次都会创建新的Player,而不是修改旧代码。

void woodyard::collect_wood(Player& player)
{
  player.wood_resource++;
}

注意&

中的 void woodyard::collect_wood(Player& player)

您可以通过参考here

了解有关函数调用的更多信息

答案 2 :(得分:0)

默认情况下,函数是按值调用的(有异常)。如果您需要更改原始副本而不是临时对象,则需要使用参考指针

您可以使用以下两种功能:

void woodyard::collect_wood(Player& player)
{
  player.wood_resource++;
}

OR

void woodyard::collect_wood(Player *player)
{
  if(player)
  {
     *player.wood_resource++;
  }
}