sf::Clock::GetElapsedTime() returns an Uint32 (32-bit unsigned integer) with the elapsed number of milliseconds (ms) that have passed since you started the clock (or the last time you reset it).
The reason you can't cast it to a string is because sf::String is meant to be used with different representations of, well, strings. Characters, not binary representations of numbers. When you write, say,
sf::String s;
s='a';
the character 'a' has a representation and a meaning. The representation is the binary code, a number in essence. The meaning is the letter a. For example,
char x = 97;
(x == 'a')
evaluates to true.
So, referring to your problem. Let's say you call GetElapsedTime(). You get a number like 1357, meaning it's been 1.357 seconds since the clock was started or reset. If you want to convert this to a string to write it out, you have to find a way of converting each digit into a character.
Thankfully, this is a common need, and there are many functions that do it. itoa() in the <cstdlib> header can do it, you can look up a reference for it
here.
Given your number and a char array, it will fill the char array with a null terminated string with the depiction of the number in the appropriate base. You can then pass this array to sf::String, which can then do whatever you need it to do.
This will not format the time into a readable format, however. You'll need to massage the numbers to get them to read as time (meaning seconds, minutes, hours).
For an example of how to do it:
#include <cstdlib>
#include <SFML/System.hpp>
int main()
{
sf::Clock Clock;
sf::String s;
char buffer[10];
Uint32 time;
time=Clock.GetElapsedTime();
while(time<5000)
{
int hours = time/3600000; // We get the number of hours, there's 3600000 milliseconds in each hour
time -= hours * 3600000; // Now that we know the number of hours, we remove that number of milliseconds from time so we can figure out the minutes left over.
itoa(hours, buffer, 10);
s=buffer; // I took a quick look at String's documentation, I think this is valid.
// You might have to do a bit more magic to get the chars into the string, but at least buffer now has the right values
s+=" hours, "; //s only contained a number (written in characters), now it contains the string "hh hours, " where hh means the number of hours
int minutes = time / 60000 ; // There's 60000ms in each minute
time -= minutes * 60000;
itoa(minutes, buffer, 10);
s+=buffer; s+=" minutes, ";
int seconds = time / 1000; // Naturally, there are 1000ms per second
time -= seconds * 1000;
itoa(seconds, buffer, 10);
s+=buffer; s+=".";
itoa(time, buffer, 10);
s+=buffer; s+=" seconds.\n";
// Right now, s contains a string that looks like "hh hours, mm minutes, ss.mmm seconds."
// You can now attempt to display the string in whatever manner best suits your needs.
time=Clock.GetElapsedTime();
} // The loop will run for 5 seconds before exiting.
return 0;
}