Given an initial point p0 = (x0, y0) and a final point p1 = (x1, y1), atan2(y1 - y0, x1 - x0) gives the angle from p0 to p1, expressed in radians in the interval (-pi, pi].
atan2(0, 0) is indeterminate.
I can't use guy.move because it will just unlimitedly move it, I can't use guy.SetPosition because it can only move up,down,left,right. What should I use?
atan2 will give you the angle, which you can use to set the rotation of your guy. The angle is of little/no use to you apart from that.
For movement, you'll want to get an orientation. You can get this by simply subtracting the current position from the goal position. This will give you the direction which you need to move, and how far in that direction you need to move in order to reach the goal.
You can scale down that orientation so that it has a length of 1 (ie: make it a "unit vector"). You can then multiply that unit vector by the guy's speed to get your movement vector. You then add that movement vector to your position to move.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// get our orientation
sf::Vector2f orientation = mouse_pos - current_pos;
// Use pythagorean theorum to find out the length of the orientation vector
auto length = sqrt( orientation.x*orientation.x + orientation.y*orientation.y );
// use the length to scale down the vector to make it have a length of 1
orientation /= length;
// now we can get our movement vector by applying our speed. Higher numbers = the
// guy moves faster
sf::Vector2f movement = orientation * speed;
// now that we have the movement vector, we can move by adding it to our position
current_pos += movement;