I have 3 classes, Player, Monster and Attack.
Class Player
{
  public:
  void addMonster(string line);
  // ...
}
Class Monster
{
 public:
   void addAttack();
   // ...
 private:
   vector <Attack> _attacks;
}
Now, addMonster() creates a new monster mn, and then has mn call its method addAttack() to fill the vector _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);
}
and it seems to work, if I check the contents of _attacks while inside addAttack(), it is pushing the correct elements in, the size of _attacks changes and evreything, but when the program returns to addMonster(), the _attacks vector of mn is still (or again) empty, as if it had not called the method at all. Why? it's as if the object that gets modified is just a copy of the one calling the method, so the original one is not affected, but then how am I supposed to change that vector of that specific object?
 
    