2

希望你们中的一些 TinyXML++ 人可以帮助我。真的,因为你在我认为你欠我之前向我推荐了;)

我有以下代码:

   //ticpp::Iterator< ticpp::Element > child( "SetPiece" );
    ticpp::Iterator< ticpp::Node > child("SetPiece");
    GLuint lc_SPieces = 0;
    for(child = child.begin( this ); child != child.end(); child++ )
    {
        lc_SPieces++;
    }

如果我对 child 使用 top 声明,我会收到错误:

Drawing.exe 中 0x7c812aeb 处未处理的异常:Microsoft C++ 异常:__non_rtti_object @ 0x0012f7b4。

我在这一行的 dbgheap.c 中得到它:

pvBlk = _heap_alloc_dbg(nSize, nBlockUse, szFileName, nLine);

奇怪的是它适用于 Node,而且我知道其中有元素(我使用 TinyXML 迭代方法进行了检查)。

有没有人遇到过这个?

4

3 回答 3

1

只是在黑暗中戳,我不知道 tinyxml,但似乎 dynamic_cast 出错了。如果你 dynamic_cast<> 一个指针,你会在失败时得到一个 NULL 指针。但是,如果转换为引用类型,则没有 NULL 引用的概念,因此运行时会抛出此异常(或 bad_type)。关于 dynamic_cast 的 MSDN,以及为什么会出错

您为发生异常而粘贴的行无助于清除情况,因为它识别的是症状而不是原因。

尝试识别出错的演员表,如果您向上走堆栈并在 tinyxml 库或标头中找到最后一个方法,您应该能够找到它。然后您可以决定是否使用 tinyxml,或者您只是以错误的方式应用它。

祝你好运!

于 2008-11-02T15:57:02.197 回答
1

__non_rtti_object如果传递的指针或引用不指向多态对象,而是指向一些垃圾,则由 dynamic_cast 运算符生成。也许该对象之前已被删除。

单步调试调试器中的代码并检查 dynamic_cast 的使用位置以及传递给它的内容。

帕沃

于 2008-11-12T23:38:55.207 回答
0

项目 -> 属性 -> C/C++ -> 语言 -> 启用运行时类型信息

于 2008-11-02T16:12:22.040 回答