Home > Software design >  class member values doesn't get changed by function... "noob question"
class member values doesn't get changed by function... "noob question"

Time:11-24

I am trying to update the particles positions by calling a function for the class.. The values for v_x, v_y, a_x, a_y doesnt keep its new value after the function. I thought this would work because update_pos is a member function of the class. what am i doing wrong here?

class particle : public sf::CircleShape
{
    float mass;
    float v_x, v_y, a_x, a_y;


    public:
    particle(float radius,int x, int y)
    {
        setRadius(radius);
        setOrigin(radius, radius);
        setPosition(x, y);
        setFillColor(sf::Color::White);
        mass = radius;

        v_x = 0;
        v_y = 0;
        a_x = 0;
        a_y = 0;
    };

    void update_pos()
    {
        float g = 9;

        //upd acc
        a_x  = g * 0 / mass;
        a_y  = g / mass;
        
        //upd vel
        v_x  = a_x;
        v_y  = a_y;

        //move particle
        setPosition(getPosition().x   v_x, getPosition().y   v_y);
    }
};

this function is used in main to update every particle.

void update_particles(std::vector<particle>& particles)
{
    for (particle p : particles)
    {
        p.update_pos();
    }
}

CodePudding user response:

This code

for (particle p : particles)

copies every particle in your vector, p is a copy. So you are changing copies of the particles in your vector, not the originals.

To avoid the copy you need a reference

for (particle& p : particles)

For a largish class like particle a reference is desirable anyway, just for efficiency reasons.

  • Related