Yes, you are definitely overdoing it, even theoretically, with the seconds-per-frame
.
By the way, I think the variable that you named "speed" should be called "velocity". Velocity is a vector, it has direction AND value, speed has just a value. Of course, I'm aware you may already know that and use the name "speed" for convenience.
I'm sure you know this equation:
average velocity = position change / time change
Since we are looking for position change, we can transform this equation into:
position change = velocity * time change
[m] = [m/s] * [s]
To calculate time change, I suggest measuring gaps between each frame.
sf::Clock clock;
Uint32 last_frame = clock.GetElapsedTime();
while (game_running)
{
time_diff = clock.GetElapsedTime() - last_frame;
sprite.Move(velocity * time_diff);
}
Remember that time_diff is in milliseconds, so if your velocity is in meters per SECOND, divide time_diff by 1000 so it's in seconds as well.