其他分享
首页 > 其他分享> > c-动态类型转换抛出的指针不是std :: __ non_rtti_object

c-动态类型转换抛出的指针不是std :: __ non_rtti_object

作者:互联网

我在使用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,我没有足够的声誉来添加该标签!

解决方法:

CCNode是否具有任何虚拟功能? temp-> getChildren()-> begin()的所有元素真的都是CCNode吗? temp-> getChildren()是否返回引用?后者特别隐蔽:您同时调用temp-> getChildren()-> begin()和temp-> getChildren()-> end().如果getChildren()返回一个副本,则您使用的是一个副本的开头和另一个副本的结尾.

标签:dynamic-cast,c,cocos2d-iphone
来源: https://codeday.me/bug/20191012/1899417.html