It depends on how you are using the Bullet objects.
This is just a guess about how you are handling it, but if you are pushing them into a vector, like std::vector<Bullet>, then that's the problem.
Sprites store a pointer to the texture you attach to them. This means the Texture object can't move in memory, the pointer to the texture in the sprite will break.
When an object is added to a vector, it makes a duplicate at a different location, so the texture pointer is not valid in the duplicate (points to the original Bullet, not the one in the vector). Also adding things to a vector will make the vector occasionally resize, which requires moving everything around (breaking the texture pointers again).
Although as I said, that's just a guess.
I find the easiest way to deal with Texture objects is to allocate them on the heap (using new) and handle them with pointers. This stops duplication and moving around in memory, so the binding from the sprite won't break.
I'd change the header to have:
sf::Texture *bulletTexture;
and the constructor to have:
bulletTexture = new sf::Texture;
bulletTexture->loadFromFile("Resources/Syringe.png");
bulletSprite.setTexture(*bulletTexture);
Even better would be to load the texture once somewhere (like a resource manager) and reuse it. Unlimited sprites can share a single texture. Right now every Bullet is reloading the png file and storing a copy of it's data.
(on a side note, I'd remove all the this-> bits, they aren't hurting but they also aren't doing anything)