0

我有一堂课叫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++ 中编码

4

3 回答 3

8

你应该在这里使用参考。

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

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

于 2013-07-22T12:39:56.620 回答
0

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

你的任何两个功能:

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

或者

void woodyard::collect_wood(Player *player)
{
  if(player)
  {
     *player.wood_resource++;
  }
} 
于 2013-07-22T13:22:24.247 回答
0

将其作为引用调用。你的代码做什么,它Player每次都会创建新的,而不是修改旧的。

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

&请注意void woodyard::collect_wood(Player& player)

您可以在此处通过引用阅读有关函数调用的更多信息

于 2013-07-22T12:55:07.207 回答