Well Laurent was right.
Ship includes AlienProjectile, which includes Projectile, which includes Ship, which includes AlienProjectile, which includes Projectile, which includes Ship, which includes AlienProjectile, which includes Projectile, which includes Ship, which includes AlienProjectile, which includes Projectile, which includes Ship, which includes AlienProjectile, which includes Projectile, which includes Ship, which includes AlienProjectile, which includes Projectile, which includes Ship, which includes AlienProjectile, which includes Projectile, which includes Ship, which includes AlienProjectile, which includes Projectile, which includes Ship, which includes AlienProjectile, which includes Projectile...........
The way to solve this, is to forward declare stuff you're only referencing in the header.
For instace Projectile only uses a reference to Ship in its header, so instead of the
#include "Ship.h" you write
class Ship;, which tells the compiler: "Hey I'll be defining this class later on."
The same would apply for the Projectile in AlienProjectile etc.
Just google for "forward deceleration" or better look it up in a good C++ book.
Btw. you should never put
using namespace xyz; in a header file, well in mostly all cases you shouldn't be using namespace anyways. Namespaces are very useful, since they tell exactly from where the function originates from and prevent name clashes.