我使用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();
}
答案 0 :(得分:3)
PS = &Fireworks(Vector3f(0,0,0), Vector3f(200,0,255));
这引入了未定义的行为。右侧创建一个临时表,一旦完整表达式结束(即在;
之后),将立即删除该临时表。 <{1}}将指向该行之后的已删除对象 - 对其执行任何操作都是未定义的行为。
使用PS
。
new
此外,必须从声明为返回内容的所有函数(非void)返回。它们是否是虚拟无关紧要。