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

calling a method to change a private variable in c++

本文关键字:方法 改变 变量 一个 c++ 调用      更新时间:2023-10-16

我有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);
}

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

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