3

dynamic_castに問題があります。プロジェクトをコンパイルし、デバッグモードですべてをテストしてから、リリースモードでコンパイルしてみました。現在、/ o2になっている最適化パラメーターを除いてデバッグモードからすべての構成をコピーしました(デバッグ中は/ odとして設定しました)。プロジェクトはコンパイルされましたが、リソースのロードを開始すると、ここのコードで例外が発生しました:

for(int j = 1; j < i->second->getParametersNumber();j++)
{
    CCTMXTiledMap* temp = CCTMXTiledMap::tiledMapWithTMXFile(i->second->As<string>(j).c_str());
    CCTMXLayer* ret = NULL;
    for(NSMutableArray<CCNode*>::NSMutableArrayIterator l=temp->getChildren()->begin();!ret && l!=temp->getChildren()->end();l++)
        ret = dynamic_cast<CCTMXLayer*> (*l);
    t1.first = ret;
    templates[i->first].second.push_back(t1);
    templates[i->first].second.back().first->retain();
}

コードは何も変更されていません。デバッガーをチェックインすると、クラス内のすべての変数が本来あるべき姿になりますが、動的キャストはstd::__non_rtti_objectをスローします。私はそれを間違って何をしていますか?cocos2d-xを使用していますが、そのタグを追加するのに十分な評判がありませんでした。

4

2 に答える 2

1

CCNode仮想機能はありますか?temp-> getChildren()-> begin()のすべての要素は本当にCCNodesですか?temp->getChildren()参照を返しますか?後者は特に陰湿です。との両方を呼び出しtemp->getChildren()->begin()ますtemp->getChildren()->end()getChildren()コピーを返す場合は、あるコピーbeginend別のコピーを取得しています。

于 2011-04-07T14:44:59.717 に答える
1

この場合、多くのコード変更を行った後、コードが最適化されたときに現れるバグがいくつかある必要があることがわかりました(コンパイラの最適化が間違っているのか、コードに問題があるのか​​はわかりませんが、おそらく私のものです)。その問題の主な理由は、*lNULLであることにありました。

于 2011-06-04T23:54:48.997 に答える