通过指向指针向量的指针进行迭代

时间:2012-05-14 09:38:44

标签: iphone c++ cocos2d-iphone box2d

我正在尝试使用cocos2d和Box2D编写iPhone游戏,这意味着我必须在Objective-C和C ++之间进行混合。我有一个关于使用指向我创建的gameLevels和levelObjects对象的指针的问题。

我有一个名为GameLevel的类,它包含一个levelObjects的向量。我认为使用指针是这样做的方法,以确保我尽可能少地使用内存。这意味着我的载体是

std::vector<LevelObject*>* levelObjects;

LevelObject类包含sprite,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 个答案:

答案 0 :(得分:2)

你的迭代器指向指针,所以你需要两个解引用:

(*it)->sprite

迭代器的解引用,

*it

为您提供LevelObject*

答案 1 :(得分:1)

你有两个间接级别,迭代器和向量内的指针。

您需要(*it)才能找到指针,然后使用->取消引用:

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