2011-02-09 118 views
1

我有這樣的代碼: std :: vector不保留數據?


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並無限力之一的實力,COUT的1.但是,當更新被調用,它只是輸出0 ,彷彿這支部隊已不在那裏。

回答

4

您正在存儲一個指向強制的指針,但強制是局部函數。您必須使用new在堆上創建。

Force* f = new Force; 
forces.push_back(f); 
+0

謝謝,工作就像一個魅力! +1 – Chris 2011-02-09 21:14:55

3

您需要與新創建力:

Force *newforce = new Force; 
newforce->Init(draw, str, newdir, lifet, lifelength); 
forces.insert(forces.end(), newforce); // or: forces.push_back(force); 

與您的代碼會發生什麼事是你的對象保持在棧上,你離開的功能和做其他事以後,它被覆蓋。

爲什麼指向矢量?可能你想要一個Force的矢量,而不是Force *。在將它扔掉之前,你還必須刪除你的矢量的所有元素!