こんにちは、一連のクラス オブジェクトを含むベクターの要素にアクセスし、ベクターからオブジェクトを 1 つだけ削除しようとしています。
問題は、私がベクトルを理解していないことと、役立つ情報をオンラインで見つけることができないことです。
私のコード:
void MyExperiment::deselectSingle() {
Ogre::Vector3 vNewPos = mPickedObj->_getDerivedPosition();
mPickedObj->showBoundingBox( false );
mMoveThis->removeChild( mPickedObj->getName() );
mSceneMgr->getRootSceneNode()->addChild( mPickedObj );
mPickedObj->_setDerivedPosition( vNewPos );
for ( Ogre::SceneNode* it = vObjects.begin(); it < vObjects.end(); it++ ) {
static std::string objNameStr;
objNameStr = vObjects.at( *it )->getName();
if ( objNameStr == mPickedObj->getName() )
{
vObjects.erase( *it );
break;
}
}
if ( mMoveThis->numAttachedObjects() == 0 ) bSelected = false;
return;
}
このコードが機能しないことはわかっています。イテレータの使用方法についてオンラインでいくつか読んだことがありますが、いくつか試してみると、提案されたエラーが発生します。実際、ここにあるものはいくつかのエラーを引き起こします。
この関数の私の計画は、Ogre::SceneNode ポインター要素を含む vObjects ベクトルを反復処理することでした。要素の 1 つが mPickedObj の名前と一致する場合、.erase() foo によってベクターから削除します。上記のコードは機能しません。アプリケーションで試したものですが、例としてだけありました。