我有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向量仍然(或再次)为空,就好像它根本没有调用该方法一样。 为什么? 好像被修改的对象只是调用该方法的对象的副本,因此原始对象不会受到影响,但那么我应该如何更改该特定对象的该向量呢?
答案 0 :(得分:-2)
在addAtack中创建* att指针时,您在堆栈上创建了它。堆栈变量在其原始函数结束时被删除,因此在添加攻击时删除了att。一种可能的解决方法是使用关键字new。在堆上创建att。