Cocos2d-x Vector——vector iterators incompatible

Cocos2d-x Vector——vector iterators incompatible,第1张

概述***************************************转载请注明出处:http://blog.csdn.net/lttree****************************************** 使用 cocos2d-x 中的 Vector的时候, 在删除某个对象的时候出现了个错误,很崩溃啊..... Vector<Bullet*>* bullets;/

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************


使用 cocos2d-x 中的 Vector的时候,

在删除某个对象的时候出现了个错误,很崩溃啊.....

Vector<Bullet*>* bullets;// 遍历每个bullet,让他们自己更新for ( auto it = bullets->begin();it!=bullets->end();it++){  (*it)->update();  // 获取子d生命,若子d已经消亡,释放  if( (*it)->getlife() )	{			    Bubblet* b = *it;    bubblets->eraSEObject(b);    this->removeChild( b,true );  }		 }

就会发生错误——vector iterators incompatible;

或许是我 打开的方式不对,于是用C++11方法:

Vector<Bullet*> bullets;for( auto& b : bullets )  {  b->update();  if( b->getlife() )  {    bubblets.eraSEObject(b);    this->removeChild(b,true);  }}

还是不行。。。

找了很久,发现,

据说是因为,迭代器遍历的时候,如果把当前的给删除了,那么后面就乱套了,无法继续进行下去了,

所以,会崩溃。


于是乎,如果通过迭代器来遍历,就这么改:

// 遍历每个bullet,让他们自己更新for ( auto it = bullets->begin();it!=bullets->end();){  (*it)->update();  // 获取子d生命,若子d已经消亡,释放  if( (*it)->getlife() )	{			    Bubblet* b = *it;    it = bubblets->eraSEObject(b);    this->removeChild( b,true );  }  else  {    it++;  }		 }

迭代器的移动,不再靠循环,而是靠判断语句。

可惜,通过C++11方法的遍历,我还没想到要怎么改。。。





******************************************

总结

以上是内存溢出为你收集整理的Cocos2d-x Vector——vector iterators incompatible全部内容,希望文章能够帮你解决Cocos2d-x Vector——vector iterators incompatible所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1065387.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-26
下一篇2022-05-26

发表评论

登录后才能评论

评论列表(0条)

    保存