动态强制转换抛出的指针不是std::__non_rtti_object
dynamic cast throws pointer is not 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
s吗?temp->getChildren()
是否返回引用?后者尤其阴险:您同时调用temp->getChildren()->begin()
和temp->getChildren()->end()
。如果getChildren()
返回一个副本,则取一个副本的begin
和另一个副本的end
。
在这种情况下,经过许多代码更改后,我发现必须有一些bug在代码优化时显示自己(仍然不知道它是编译器的错误优化还是我的代码有一些问题,但它可能是我的)。这个问题的主要原因是*l
为NULL。
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- 具有std::initializer_list参数的非成员函数(/non构造函数上下文)的重载解析
- std::span constructor, libcxx vs libstdc++, template vs non-
- non-const find() in std::unordered_set
- 我收到一个" conversion from ‘std::string (*)[50]’ to non-scalar type ‘std::string’ requested"错误,似乎无法修复它
- std::variant、包装类和'conversion from ... to non-scalar type ... requested'
- constexpr with std::array - "Non-type template argument is not a constant expression"
- 使用 'std::function<void(...)>' 调用 non-void 函数
- 如何使用<double>boost::p ython通过引用将non-const std::vector传递给Python?