调用一个方法来改变c ++中的私有变量

时间:2015-06-05 14:17:57

标签: c++

我有3个班,玩家,怪物和攻击。

Class Player
{
  public:
  void addMonster(string line);
  // ...
}


Class Monster
{
 public:
   void addAttack();
   // ...
 private:
   vector <Attack> _attacks;
}

现在,addMonster()创建一个新的怪物mn,然后让mn调用它的方法addAttack()来填充向量_attacks

void Player::addMonster(string line){
   //...
   Monster mn(line); //creates a new monster
   while(condition){
      mn.addAttack();
   }
}

void Monster::addAttack(){
   //...
   Attack *att = gio->findAttack(ID) //takes the attack from another part of the program
   _attacks.push_back(*att);
}

它似乎工作,如果我在addAttack()内部检查_attacks的内容,它正在推送正确的元素,_attacks的大小变化和evreything, 但是当程序返回addMonster()时,mn的_attacks向量仍然(或再次)为空,就好像它根本没有调用该方法一样。 为什么? 好像被修改的对象只是调用该方法的对象的副本,因此原始对象不会受到影响,但那么我应该如何更改该特定对象的该向量呢?

1 个答案:

答案 0 :(得分:-2)

在addAtack中创建* att指针时,您在堆栈上创建了它。堆栈变量在其原始函数结束时被删除,因此在添加攻击时删除了att。一种可能的解决方法是使用关键字new。在堆上创建att。