2012-05-14 224 views
1

我想用cocos2d和Box2D編寫iPhone遊戲,這意味着我必須在Objective-C和C++之間進行混合。我有一個關於使用指針指向我創建的gameLevels和levelObjects的對象的問題。迭代指針向量指針

我有一個名爲GameLevel的類,它包含一個levelObjects向量。我認爲使用指針是做到這一點的方法,以確保儘可能少地使用內存。這意味着我的矢量是

std::vector<LevelObject*>* levelObjects; 

LevelObject類包含精靈,b2bodyDef等等,以及所有指針。

當我想繪製一個關卡時,我想通過這個向量迭代時出現問題。我寫的代碼是這樣的:

-(void)startLevel:(b2World*) world withLevel:(GameLevel*) level{ 
std::vector<LevelObject*>::iterator it; 
for (it = level->getLevelObjects()->begin() ; it != level->getLevelObjects()->end(); ++it) { 
    CCSprite* sprite = it->sprite; //Here XCode complaints about "Member reference base type 'LevelObject *' is not a structure or union" and "Use of undeclared identifier 'sprite'". I cannot seem to access any of the objects variables/methods from it-> 

所以我想問的問題是:這是一個很好的方法來此,用指針的指針的載體?爲什麼迭代不工作?

謝謝:)

編輯:getLevelObjects()是:

std::vector<LevelObject*>* getLevelObjects(){return levelObjects;} 

回答

2

你的迭代器指向指針,所以需要兩個指針引用:

(*it)->sprite 

迭代器的提領,

*it 

給你一個LevelObject*

+0

啊,當然! :d – Jambaman

1

你有兩個級別的間接,迭代器和矢量內的指針。

你需要(*it)去的指針,然後用->取消引用是:

CCSprite* sprite = (*it)->sprite;