2012-11-10 30 views
1

我使用Fireworks初始函数将粒子存储到粒子矢量类中。 当我尝试在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();  
} 
+3

这个问题缺少一些代码。什么是类声明?你的功能如何使用? – Synxis

+0

从您发布的代码中完全不清楚您要做什么。你可以发布一个简单的代码示例来说明问题吗? – juanchopanza

+0

您无法在更新功能中检索它。但是在你发布的代码中,你甚至没有试图在更新函数中检索它。请解释你正在做什么,究竟是什么问题,我们无法猜测。 – john

回答

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

这就引入了不确定的行为。右边创建一个临时的,一旦完整的表达式结束(即在;之后),将被删除。 PS会在该行之后指向一个被删除的对象 - 对它做任何事情都是未定义的行为。使用new

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

此外,您必须从被声明为返回的东西(非空)的所有功能回报。它们是否虚拟并不重要。

+0

谢谢。有用。现在我要去做一些烟花。 :| –

+0

一定要打开你的编译器的警告,它应该告诉你这条线有问题。 – Mat

+0

再次感谢您花时间帮助我。不胜感激。周末愉快! –