You can pass by reference instead of by pointer, which is generally prefered, if possible. This also has the side-effect of allowing you to use the original code instead of specific pointer syntax.
i.e.
void logic::fire(sf::Clock& clock)
{
sf::Time shot;
shot = clock.getElapsedTime();
sf::Time reload = sf::milliseconds(1500);
std::cout << shot.asMilliseconds();
if(sf::Mouse::isButtonPressed(sf::Mouse::Left) and shot >= reload )
{
std::cout << "Sup m8" <<std::endl;
clock.restart();
}
}
Another option is for the "logic" class to have the sf::Clock as its (probably private) member, in which case it would have direct access to it (assuming "logic" is a class).
One other possibility is to make the clock static. It might work