In your Bullet::getPlayerPosition() function you are doing return a.PlayerPosition();
But a is a Bullet that was created at the top of the file. Bullets don't have a PlayerPosition() function (or if they do, we can't see that part of the code).
I'm guessing that's a typo when posting this to the forum and it would really be Player a; at the top.
But that would be a problem too, since that would be a player that only the Bullet file knows about, not the player that the rest of the game knows.
So when the player moves, the second player stored in the variable a doesn't.
What should fix it is if you make sure Bullet::getPlayerPosition() is referring to the actual main player object, not a local second player object.