указатель динамического броска не является std :: __ non_rtti_object - PullRequest
2 голосов
/ 07 апреля 2011

У меня проблема с 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, у меня не было достаточно репутации, чтобы добавить этот тег!

Ответы [ 2 ]

1 голос
/ 05 июня 2011

В этом случае после многих изменений кода я обнаружил, что должны быть некоторые ошибки, которые показывают себя, когда код оптимизирован (все еще не знаю, является ли это неправильной оптимизацией компилятора, или у моего кода есть некоторые проблемы, но это, вероятно, мое). и главная причина этой проблемы была в том, что *l равен NULL.

1 голос
/ 07 апреля 2011

Есть ли у CCNode какие-либо виртуальные функции?Все ли элементы temp-> getChildren () -> begin () действительно CCNode s?temp->getChildren() возвращает ссылку?Последнее особенно коварно: вы звоните как temp->getChildren()->begin(), так и temp->getChildren()->end().Если getChildren() возвращает копию, вы берете begin одной копии и end другой копии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...