2008-11-01 10 views
2

En espérant que certains d'entre vous les gens TinyXML ++ peuvent m'aider. Vraiment, puisque vous me RECOMMANDÉ avant que je pense que vous me devez;)comportement étrange de TinyXML ++

J'ai le code suivant:

//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++; 
    } 

Si j'utilise la déclaration haut pour enfant j'obtenir l'erreur:

Unhandled exception at 0x7c812aeb in Drawing.exe: Microsoft C++ exception: __non_rtti_object @ 0x0012f7b4.

et je reçois dans dbgheap.c à cette ligne:

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

ce qui est bizarre est il fonctionne avec nœud, et je sais qu'il y a des éléments dedans (j'ai vérifié en utilisant les méthodes d'itération de TinyXML).

Quelqu'un at-il déjà rencontré cela?

Répondre

1

juste piquer dans le noir, je ne sais pas tinyxml, mais il semble qu'un dynamic_cast a mal tourné. Si vous dynamiquez le <> un pointeur, vous obtenez un pointeur NULL en cas d'échec. Cependant, si vous transtypez vers un type de référence, il n'y a pas de concept de référence NULL, de sorte que le runtime lève cette exception (ou bad_type). La ligne que vous avez collée pour que l'exception se produise n'aide pas à clarifier la situation, car elle identifie le symptôme plutôt que la cause. Essayez d'identifier la distribution qui a mal tourné, vous devriez être capable de la trouver si vous montez la pile et trouvez la dernière méthode dans des librairies ou des en-têtes tinyxml. Ensuite, vous pouvez décider si tinyxml est usé ou si vous ne l'avez pas appliqué correctement.

bonne chance!

0

Projet -> Propriétés -> C/C++ -> Langue -> Activer Run-Time Type Infos

1

__non_rtti_object est généré par l'opérateur dynamic_cast si le pointeur ou référence passé ne pointe pas vers un objet polymorphes, mais à la place des ordures. Peut-être que l'objet avait été supprimé plus tôt.

Parcourez le code dans le débogueur et vérifiez où dynamic_cast est utilisé et ce qui lui est transmis.

hth Paavo