2017-09-24 142 views
-4

所以我想製作一個粒子系統,我需要創建一些粒子對象並將它們存儲在一個向量中以便以後使用它們。 ,做的是功能是:創建一個對象並將其存儲在向量中可以產生值

void spawnLoop(std::vector<Particle*> &particleVector){ 
    for (int i=0; i < 5; i++) { 
     particleVector.emplace_back(new Particle(400.0, 400.0, 1.0, 1.0)); 
    } 
} 

顆粒類的構造函數如下:

Particle::Particle(float xPos= 400,float yPos= 400,float xVel= 0,float yVel= 0) { 
float xPosition = xPos; 
float yPosition = yPos; 
float xVelocity = xVel; 
float yVelocity = yVel; 
bool dead = false; 
std::cout<< "We have " << xPosition << " "<< yPosition << " "<< xVelocity << " "<< yVelocity << std::endl; 
//This prints the values and they look correct 
} 

但是,如果我試圖遍歷準確後,我完成存儲它的載體,它給了我值爲:1.81063e + 13。 我確實試圖研究它很多,但找不到任何解決方案。 編輯:

void loopOver(std::vector<Particle*> const vec){ 
for (auto i = vec.begin(); i != vec.end(); i++){ 
    std::cout << "avem " << (*i)->getXPos() << " " << (*i)->getYPos() << std::endl; 
} 
} 
+1

它沒有發生在你身上它可能是後來的循環是這個問題? – StoryTeller

+1

我必須質疑'std :: vector '的用法 - 它應該是非指針'std :: vector '或使用智能指針,例如:'std :: vector >'' – UnholySheep

+0

爲什麼你需要在該向量中存儲指針,你不能簡單地在那裏存儲普通的'粒子'實例嗎? – user0042

回答

2

的問題是在Particle構造。您將參數分配給本地變量,而不是實例變量。所以,後來,當您嘗試打印出這些變量的值,他們還沒有被保存:

這就是問題所在:

float xPosition = xPos; 
float yPosition = yPos; 
float xVelocity = xVel; 
float yVelocity = yVel; 

應該是這樣的:

_xPosition = xPos; 
_yPosition = yPos; 
_xVelocity = xVel; 
_yVelocity = yVel; 

其中所有這些變量都定義爲該類的實例變量,並且getXPos()等將其返回。

更好的辦法是不在構造函數中賦值,而是爲它們初始化一個初始化列表。這裏是關於初始化列表的一個體面的問題/答案:C++ initialization lists for multiple variables

+1

它沒有真正與_工作,但如果我只是刪除浮動它將工作。 –

+0

@Turry下劃線只是命名實例變量的慣例。你可以隨便打電話 – Eli

相關問題