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 が使用されている場所と渡された内容を確認します。

h 番目のパーヴォ

于 2008-11-12T23:38:55.207 に答える
0

プロジェクト -> プロパティ -> C/C++ -> 言語 -> 実行時の型情報を有効にする

于 2008-11-02T16:12:22.040 に答える