3

我在使用 dynamic_cast 时遇到问题。我刚刚编译了我的项目并在调试模式下测试了所有东西,然后我尝试在发布模式下编译它,我已经从调试模式 exept 优化参数复制了每个配置,现在是 /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()CCNode的所有元素都是真的吗?是否temp->getChildren()返回参考?后者特别阴险:你同时调用temp->getChildren()->begin()temp->getChildren()->end()。如果getChildren()返回一个副本,您将获取begin一个副本和end另一个副本的 。

于 2011-04-07T14:44:59.717 回答
1

在这种情况下,经过多次代码更改后,我发现在优化代码时必须存在一些错误(仍然不知道是编译器的错误优化还是我的代码有一些问题,但它可能是我的)。这个问题的主要原因*l是NULL。

于 2011-06-04T23:54:48.997 回答