SFML C++ union constructor is implicitly deleted because the default definition would be ill formed
<p>I have been trying to solve this problem for 3 hours but i cant. I am trying to learn c++ but i am stuck here. I don't know the problem. I was trying to create an object pool to use with my bullet objects so i could spawn and despawn them easily without memory leak. My source is as follows:</p>

<p>main.cpp </p>

<p>--the first error is in the constructor of the Bullet class and the update method of the BulletPool class.</p>

<pre><code>#include &lt;SFML/Graphics.hpp&gt;
#include &lt;stdio.h&gt;
#include &lt;time.h&gt;
#include &lt;assert.h&gt;

#include "bullets.hpp"
#include "enemies.hpp"

BulletPool::BulletPool() { //no matching function for call to 'Bullet::Bullet()'
  // The first one is available.
  firstAvailable_ = &amp;bullets_[0];

  // Each particle points to the next.
  for (int i = 0; i &lt; POOL_SIZE - 1; i++)
  {
    bullets_[i].setNext(&amp;bullets_[i + 1]);
  }

  // The last one terminates the list.
  bullets_[POOL_SIZE - 1].setNext(NULL);
}


Bullet::Bullet(sf::Vector2f pos, sf::Color color, float bullet_radius, bool enemy, sf::Vector2f vel) { //  candidate expects 6 arguments, 0 provided
    onScreen_=true;
    inUse = true;
    state_.live.enemy_ = enemy;
    state_.live.velocity_ = vel;
    shape.setRadius(bullet_radius);
    shape.setOrigin(bullet_radius, bullet_radius);
    shape.setFillColor(color);
    shape.setPosition(pos);
}

void Bullet::update(sf::Vector2f screen) {
    shape.move(state_.live.velocity_);
    if((shape.getGlobalBounds().top &lt;  0 || shape.getGlobalBounds().top &gt; 200/*screen.y*/ )&amp;&amp; !state_.live.enemy_) {
        onScreen_ = false;
    }

    if(!onScreen_) {
        inUse = false;
    }
}
void BulletPool::create(sf::Vector2f pos, sf::Color color, float bullet_radius, bool enemy, sf::Vector2f vel) {

    assert(firstAvailable_ != NULL);

    Bullet* newBullet = firstAvailable_;
    firstAvailable_ = newBullet-&gt;getNext();
    newBullet = new Bullet(pos,color,bullet_radius,enemy,vel);

    // Find an available particle.
    /*for (int i = 0; i &lt; POOL_SIZE; i++) {

        if (!bullets_[i].inUse()) {

            bullets_[i].init(pos,color,bullet_radius,enemy,vel);
            return;
        }
    }*/
}

void BulletPool::update(sf::RenderWindow window) { //initializing argument 1 of 'void BulletPool::update(sf::RenderWindow)'
    for (int i = 0; i &lt; POOL_SIZE; i++) {
        if (!bullets_[i].inUse) {
          // Add this particle to the front of the list.
          bullets_[i].setNext(firstAvailable_);
          firstAvailable_ = &amp;bullets_[i];
        } else {
            window.draw(bullets_[i].shape);
        }
    }
}
Enemy::~Enemy() {};
RedShip::RedShip(sf::Vector2f pos,float side_ln) {
    movement = 10;
    shape.setPointCount(6);
    shape.setPoint(0, sf::Vector2f(side_ln/2, 0));
    shape.setPoint(1, sf::Vector2f(side_ln*3/8,side_ln*3/8));
    shape.setPoint(2, sf::Vector2f(0,side_ln*1/8));
    shape.setPoint(3, sf::Vector2f(side_ln/2,side_ln));
    shape.setPoint(4, sf::Vector2f(side_ln,side_ln*1/8));
    shape.setPoint(5, sf::Vector2f(side_ln*5/8,side_ln*3/8));
    shape.setFillColor(sf::Color::Transparent);
    shape.setOutlineColor(sf::Color::Red);
    shape.setOutlineThickness(5);
    shape.setOrigin(side_ln/2, sqrt((3*side_ln*side_ln)/4));
    shape.setPosition(pos);
}

void RedShip::update(float base_time, BulletPool bullets) {
    if(movement &gt; 1) {
        shape.move(3,1.5);
        movement--;
    }
    else if(movement &lt; -1) {
        shape.move(-3,1.5);
        movement++;
    }
    else if(movement == -1)
        movement = 30;
    else
        movement = -30;

    if(fmod(base_time,20)==0) {
    bullets.create({shape.getPosition().x, shape.getPosition().y + shape.getLocalBounds().height/2}, sf::Color::Red, 4,true, {0,6});
    }
}


GreenShip::GreenShip(sf::Vector2f pos, float side_ln) {
    movement={};
    shape.setPointCount(8);
    shape.setPoint(0, sf::Vector2f(0, 0));
    shape.setPoint(1, sf::Vector2f(0,side_ln*2/3));
    shape.setPoint(2, sf::Vector2f(side_ln/2,side_ln));
    shape.setPoint(3, sf::Vector2f(side_ln,side_ln*2/3));
    shape.setPoint(4, sf::Vector2f(side_ln,0));
    shape.setPoint(5, sf::Vector2f(side_ln*3/4,side_ln/2));
    shape.setPoint(6, sf::Vector2f(side_ln/2,side_ln*3/8));
    shape.setPoint(7, sf::Vector2f(side_ln*1/4,side_ln/2));
    shape.setFillColor(sf::Color::Transparent);
    shape.setOutlineColor(sf::Color::Green);
    shape.setOutlineThickness(5);
    shape.setOrigin(side_ln/2, sqrt((3*side_ln*side_ln)/4));
    shape.setPosition(pos);
}

void GreenShip::update(float base_time,BulletPool bullets) {

    shape.move(0,1);

    if(fmod(base_time,60)==0) {
    //bullets.push_back(new Bullet({shape.getPosition().x, shape.getPosition().y + shape.getLocalBounds().height/2 + 4}, sf::Color::Green, 4,true, 2));
    }
}

class Core {
public:
    const float core_velocity{5};
    int bullet_count{0};

    sf::ConvexShape shape;
    sf::Vector2f velocity;

    Core(float sX, float sY, float scale) {
        shape.setPointCount(12);
        shape.setPoint(0,{scale/2,0});
        shape.setPoint(1,{scale*7/16,scale*2/16});
        shape.setPoint(2,{scale*6/16,scale*4/16});
        shape.setPoint(3,{scale*5/16,scale*7/16+scale/3});
        shape.setPoint(4,{0,scale*10/16+scale/2});
        shape.setPoint(5,{0,scale*13/16+scale/3});
        shape.setPoint(6,{scale*8/16,scale*10/16+scale/3});
        shape.setPoint(7,{scale,scale*13/16+scale/3});
        shape.setPoint(8,{scale,scale*10/16+scale/2});
        shape.setPoint(9,{scale*11/16,scale*7/16+scale/3});
        shape.setPoint(10,{scale*10/16,scale*4/16});
        shape.setPoint(11,{scale*9/16,scale*2/16});
        shape.setFillColor(sf::Color::Transparent);
        shape.setOutlineColor(sf::Color::White);
        shape.setOutlineThickness(7);
        shape.setOrigin(scale/2, scale/2);
        shape.setPosition(sX, sY);
    }

    void update() {

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            velocity.x = -core_velocity;
        else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
            velocity.x = core_velocity;
        else
            velocity.x = 0;

        if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            velocity.y = -core_velocity;
        else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
            velocity.y = core_velocity;
        else
            velocity.y = 0;

        shape.move(velocity);

    }

    void fire(BulletPool bullets) {
        if(bullet_count &lt; 3) {
            bullets.create({shape.getPosition().x, shape.getPosition().y-shape.getLocalBounds().height/2 -1}, sf::Color::White, 6,false,{0,-8});
            bullet_count++;
        }
    }
};


int main(int argc, char *argv[]) {

    const sf::Vector2f res{480,640};
    printf("Religion ist das Opium des Volkes.\n                -Marx\n");
    sf::RenderWindow window(sf::VideoMode(res.x,res.y), "Brick Breaker", sf::Style::None);

    float base_time{0};
    Core core(res.x / 2, res.y /2 + 200, 64);
    GreenShip ship({res.x/2,50},50);
    GreenShip ship1({res.x/2+100,50},50);
    BulletPool bullets;
    //std::vector&lt;Enemy*&gt; enemies;


    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            switch (event.type)
                {

                    case sf::Event::Closed:
                        window.close();
                        break;

                    case sf::Event::KeyPressed:
                        switch (event.key.code) {

                            case sf::Keyboard::Q:
                                core.fire(bullets);
                                break;

                            case sf::Keyboard::Escape:
                                window.close();
                                break;

                            default:
                                break;
                        }
                        break;

                    default:
                        break;
        }
        }

        if(base_time&lt;3600)
            base_time++;
        else
            base_time=0;

        window.clear();
        window.setFramerateLimit(60);

        core.update();
        window.draw(core.shape);

        ship.update(base_time,bullets);
        window.draw(ship.shape);

        ship1.update(base_time,bullets);
        window.draw(ship1.shape);

        bullets.update(window); //use of deleted function 'sf::RenderWindow::RenderWindow(const sf::RenderWindow&amp;)'

        /*for(auto&amp; b : bullets) {
            if(!b-&gt;onScreen) {
                core.bullet_count--;
            }
            else {
                window.draw(b-&gt;shape);
                b-&gt;update(res,base_time,bullets);
            }
        }*/
        window.display();
    }

    return 0;
}
</code></pre>

<p>enemies.hpp (no errors in this one)</p>

<pre><code>#ifndef ENEMIES_HPP
#define ENEMIES_HPP

class Enemy{
public:
    sf::ConvexShape shape;
    int movement;
    virtual void update(float base_time, BulletPool bullets) = 0;
    virtual ~Enemy() = 0;
};



class RedShip: public Enemy{
public:
    RedShip(sf::Vector2f pos, float side_ln);
    void update(float base_time, BulletPool bullets);
};

class GreenShip: public Enemy{
public:
    GreenShip(sf::Vector2f pos, float side_ln);
    void update(float base_time, BulletPool bullets);
};



#endif
</code></pre>

<p>bullets.hpp</p>

<pre><code>#ifndef BULLETS_HPP
#define BULLETS_HPP

class Bullet{ //Bullet::Bullet(Bullet&amp;&amp;)// CANT UNDERSTAND WHY THIS POPS UP
public:
    sf::CircleShape shape;
    Bullet(); //unless i add this constructor it gives the error below↓
    Bullet* getNext() const { return state_.next_; }
    void setNext(Bullet* next) { state_.next_ = next; }
    Bullet(sf::Vector2f pos, sf::Color color, float bullet_radius, bool enemy, sf::Vector2f vel); //Bullet::Bullet(sf::Vector2f, sf::Color, float, bool, float, float)
    void update(sf::Vector2f screen);
    bool inUse;

private:
    bool onScreen_=true;
    union { //'Bullet::&lt;anonymous union&gt;::&lt;constructor&gt;()' is implicitly deleted because the default definition would be ill-formed:
        struct {
        bool enemy_;
        sf::Vector2f velocity_;
        } live; //union member 'Bullet::&lt;anonymous union&gt;::live' with non-trivial 'Bullet::&lt;anonymous union&gt;::&lt;anonymous struct&gt;::&lt;constructor&gt;()'

        Bullet *next_;

    } state_;
};

class BulletPool{
public:
    BulletPool();
    void create(sf::Vector2f pos, sf::Color color, float bullet_radius, bool enemy, sf::Vector2f vel);
    void update(sf::RenderWindow window);

private:
  static const int POOL_SIZE = 100;
  Bullet bullets_[POOL_SIZE];
  Bullet* firstAvailable_;
};

#endif
</code></pre>

<p>All errors as they are shown in eclipse:</p>

<pre><code>[solved]use of deleted function 'Bullet::&lt;anonymous union&gt;::&lt;constructor&gt;()'

initializing argument 1 of 'void BulletPool::update(sf::RenderWindow)'

use of deleted function 'sf::RenderWindow::RenderWindow(const sf::RenderWindow&amp;)'

'Bullet::&lt;anonymous union&gt;::&lt;constructor&gt;()' is implicitly deleted because the default definition would be ill-formed:

union member 'Bullet::&lt;anonymous union&gt;::live' with non-trivial 'Bullet::&lt;anonymous union&gt;::&lt;anonymous struct&gt;::&lt;constructor&gt;()'
</code></pre>

<p>compiler log(mingw g++):</p>

<pre><code>10:22:57 **** Incremental Build of configuration Debug for project Black Lambda ****
Info: Configuration "Debug" uses tool-chain "MinGW GCC" that is unsupported on this system, attempting to build anyway.
Info: Internal Builder is used for build
g++ -std=c++0x -DSFML_STATIC -D__GX_EXPERIMENTAL_CXX_0X__ -D_cplusplus=201103L "-IC:\\SFML-2.3.2\\include" -O0 -g3 -Wall -c -fmessage-length=0 -o main.o "..\\main.cpp" 
..\main.cpp: In constructor 'Bullet::Bullet(sf::Vector2f, sf::Color, float, bool, sf::Vector2f)':
..\main.cpp:24:100: error: use of deleted function 'Bullet::&lt;anonymous union&gt;::&lt;constructor&gt;()'
 Bullet::Bullet(sf::Vector2f pos, sf::Color color, float bullet_radius, bool enemy, sf::Vector2f vel) {
                                                                                                    ^
In file included from ..\main.cpp:6:0:
..\bullets.hpp:16:8: note: 'Bullet::&lt;anonymous union&gt;::&lt;constructor&gt;()' is implicitly deleted because the default definition would be ill-formed:
  union {
        ^
..\bullets.hpp:20:5: error: union member 'Bullet::&lt;anonymous union&gt;::live' with non-trivial 'Bullet::&lt;anonymous union&gt;::&lt;anonymous struct&gt;::&lt;constructor&gt;()'
   } live;
     ^
..\main.cpp: In function 'int main(int, char**)':
..\main.cpp:261:30: error: use of deleted function 'sf::RenderWindow::RenderWindow(const sf::RenderWindow&amp;)'
         bullets.update(window);
                              ^
In file included from C:\SFML-2.3.2\include/SFML/Graphics.hpp:47:0,
                 from ..\main.cpp:1:
C:\SFML-2.3.2\include/SFML/Graphics/RenderWindow.hpp:44:25: note: 'sf::RenderWindow::RenderWindow(const sf::RenderWindow&amp;)' is implicitly deleted because the default definition would be ill-formed:
 class SFML_GRAPHICS_API RenderWindow : public Window, public RenderTarget
                         ^
C:\SFML-2.3.2\include/SFML/Graphics/RenderWindow.hpp:44:25: error: use of deleted function 'sf::Window::Window(const sf::Window&amp;)'
In file included from C:\SFML-2.3.2\include/SFML/Window.hpp:42:0,
                 from C:\SFML-2.3.2\include/SFML/Graphics.hpp:32,
                 from ..\main.cpp:1:
C:\SFML-2.3.2\include/SFML/Window/Window.hpp:57:23: note: 'sf::Window::Window(const sf::Window&amp;)' is implicitly deleted because the default definition would be ill-formed:
 class SFML_WINDOW_API Window : GlResource, NonCopyable
                       ^
In file included from C:\SFML-2.3.2\include/SFML/System/FileInputStream.hpp:34:0,
                 from C:\SFML-2.3.2\include/SFML/System.hpp:35,
                 from C:\SFML-2.3.2\include/SFML/Window.hpp:32,
                 from C:\SFML-2.3.2\include/SFML/Graphics.hpp:32,
                 from ..\main.cpp:1:
C:\SFML-2.3.2\include/SFML/System/NonCopyable.hpp:67:5: error: 'sf::NonCopyable::NonCopyable(const sf::NonCopyable&amp;)' is private
     NonCopyable(const NonCopyable&amp;);
     ^
In file included from C:\SFML-2.3.2\include/SFML/Window.hpp:42:0,
                 from C:\SFML-2.3.2\include/SFML/Graphics.hpp:32,
                 from ..\main.cpp:1:
C:\SFML-2.3.2\include/SFML/Window/Window.hpp:57:23: error: within this context
 class SFML_WINDOW_API Window : GlResource, NonCopyable
                       ^
In file included from C:\SFML-2.3.2\include/SFML/Graphics.hpp:47:0,
                 from ..\main.cpp:1:
C:\SFML-2.3.2\include/SFML/Graphics/RenderWindow.hpp:44:25: error: use of deleted function 'sf::RenderTarget::RenderTarget(const sf::RenderTarget&amp;)'
 class SFML_GRAPHICS_API RenderWindow : public Window, public RenderTarget
                         ^
In file included from C:\SFML-2.3.2\include/SFML/Graphics.hpp:45:0,
                 from ..\main.cpp:1:
C:\SFML-2.3.2\include/SFML/Graphics/RenderTarget.hpp:51:25: note: 'sf::RenderTarget::RenderTarget(const sf::RenderTarget&amp;)' is implicitly deleted because the default definition would be ill-formed:
 class SFML_GRAPHICS_API RenderTarget : NonCopyable
                         ^
In file included from C:\SFML-2.3.2\include/SFML/System/FileInputStream.hpp:34:0,
                 from C:\SFML-2.3.2\include/SFML/System.hpp:35,
                 from C:\SFML-2.3.2\include/SFML/Window.hpp:32,
                 from C:\SFML-2.3.2\include/SFML/Graphics.hpp:32,
                 from ..\main.cpp:1:
C:\SFML-2.3.2\include/SFML/System/NonCopyable.hpp:67:5: error: 'sf::NonCopyable::NonCopyable(const sf::NonCopyable&amp;)' is private
     NonCopyable(const NonCopyable&amp;);
     ^
In file included from C:\SFML-2.3.2\include/SFML/Graphics.hpp:45:0,
                 from ..\main.cpp:1:
C:\SFML-2.3.2\include/SFML/Graphics/RenderTarget.hpp:51:25: error: within this context
 class SFML_GRAPHICS_API RenderTarget : NonCopyable
                         ^
..\main.cpp:64:6: error:   initializing argument 1 of 'void BulletPool::update(sf::RenderWindow)'
 void BulletPool::update(sf::RenderWindow window) {
      ^

10:22:59 Build Finished (took 1s.427ms)
</code></pre>

<p>I am just trying to learn c++ so
ANY HELP or critism IS APPRECIATED, THANKS!</p>

<p><strong>EDIT</strong>
thanks a lot for all the help. i figured all of the problems out.
The problem with BulletPool::update was that the renderwindow object was being passed without a reference causing the function to copy the window and thus not render.</p>