如何在类中使用向量

时间:2012-11-10 13:50:38

标签: c++ class vector

我使用Fireworks init函数将粒子存储到粒子向量类中。 当我尝试在update()函数中检索粒子向量的计数时,粒子向量为空。为什么呢?

Fireworks.cpp类:

void Fireworks::init(){
    float x = randf();
    float y = - 1 * randf(); //Going UP
    float z = randf();

    Particle part(position,Vector3f(x,y,z), color, randInt(1,50));
    particles.push_back(part);
}

bool Fireworks::update(){
    Particle particle;
    int count = particles.size(); //Total num of particles in system
    cout << particles.size() << " ";
}

class Fireworks: public ParticleSystem {
private:
  void init();

public:

  Fireworks(Vector3f pos, Vector3f col) {
    position = pos;
    color = col;
    init();
  }

  virtual bool update();
};

particlesystem.h

class ParticleSystem {
protected:
  vector<Particle> particles;

public:
  //virtual Particle generateParticle();
  virtual bool update(){return false;};
};

的main.cpp

ParticleSystem *PS;
int main( int argc, char *argv[] ) {
  PS = &Fireworks(Vector3f(0,0,0), Vector3f(200,0,255));
  glutIdleFunc(move);
}

void move()
{
   PS->update();       
}

1 个答案:

答案 0 :(得分:3)

PS = &Fireworks(Vector3f(0,0,0), Vector3f(200,0,255));

这引入了未定义的行为。右侧创建一个临时表,一旦完整表达式结束(即在;之后),将立即删除该临时表。 <{1}}将指向该行之后的已删除对象 - 对其执行任何操作都是未定义的行为。

使用PS

new

此外,必须从声明为返回内容的所有函数(非void)返回。它们是否是虚拟无关紧要。