Loading is relative to the current working directory, not the directory where the executable is.
So when you do ./bin/zombies it's trying to find /assets/fonts/font.ttf instead of /Zombies/assets/fonts/font.ttf.
What I do in my own SFML apps is find the directory of the executable and change the working directory to that, so where you run it from doesn't matter.
In Windows, this is what I do:
char buf[MAX_PATH];
GetModuleFileName(NULL,buf,MAX_PATH);
std::string filename(buf);
size_t backslash = filename.find_last_of('\\');
if (backslash != std::string::npos)
{
filename = filename.substr(0, backslash); // strip off the file name from the path
}
SetCurrentDirectory(filename.c_str());
If you are on a different OS, you'll need a different method.