was previously
Projectiles.push_back(C_Projectile(TurretDirection , g_WeaponManager.WeaponInfo[this->CurrentWeapon].UsableProjectiles[0]));
but i split it up to find out which line was causing the error

Oh, looks like you did not write your copy constructor correctly. Your copy constructor should take a const reference as its argument, not a reference. std::deque() expects that your copy constructor would follow the norm, but it did not.

In this case, you want objects of your class to be stored in a standard container, you should provide a copy constructor if you need to do deep copying explicitly, e.g., because you have a dynamic array as a member. Consequently, you should also provide a copy assignment operator with the same semantics, and probably also implement the destructor.

I would expect the copy constructor and copy assignment operator to be implemented along the lines of:

Of course, if you use a standard container (or one by boost) instead of a dynamic array, then you would not need to write your own copy constructor, copy assignment operator, and destructor in the first place.

Of course, if you use a standard container (or one by boost) instead of a dynamic array, then you would not need to write your own copy constructor, copy assignment operator, and destructor in the first place.

I've always wanted to try out the boost library but I don't know how to set it up...

Most of Boost is header-only. You download Boost, extract it, and set the include path of your compiler to look in the installation directory, too. E.g. if you install Boost to /usr/local/boost you pass -I/usr/local/boost to GCC on compiling to make it look there.
Code::Blocks ought to have the setting somewhere in its options. I have no idea where.

Getting the precompiled libraries is a bit trickier. I think Ubuntu ought to have a package for Boost. If not, though, it's mostly about getting bjam to run (download a binary separately, or compile one) and then invoking it at the root of the Boost tree.