2012-05-14 177 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;