我有这个代码:
void BaseOBJ::update(BaseOBJ* surround[3][3])
{
forces[0]->Apply(); //in place of for loop
cout << forces[0]->GetStrength() << endl; //forces is an std::vector of Force*
}
void BaseOBJ::AddForce(float str, int newdir, int lifet, float lifelength)
{
Force newforce;
newforce.Init(draw, str, newdir, lifet, lifelength);
forces.insert(forces.end(), &newforce);
cout << forces[0]->GetStrength();
}
现在,当我调用AddForce并使用强度为1的无限力量时,它会使用cout的1.但是当调用更新时,它只输出0,就好像力不再存在一样。
答案 0 :(得分:4)
您正在向量中存储一个强制指针,但力是本地函数。
您必须使用new
在堆上创建。
Force* f = new Force;
forces.push_back(f);
答案 1 :(得分:3)
你需要用new创建你的力量:
Force *newforce = new Force;
newforce->Init(draw, str, newdir, lifet, lifelength);
forces.insert(forces.end(), newforce); // or: forces.push_back(force);
您的代码会发生什么事情,您的对象仍然在堆栈中,在您离开函数并执行其他操作后,它会被覆盖。
为什么是指针向量?可能你想要一个力矢量,而不是力*。你扔掉之前你还必须删除你矢量的所有元素!