2008-11-01 3 views
2

Надеясь на некоторых из вас, люди TinyXML ++ могут мне помочь. Действительно, так как вы порекомендован мне, прежде чем я думаю, что вы должны мне;)Нечеткое поведение от 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++; 
    } 

Если я использую верхнюю декларацию для ребенка я получаю ошибку:

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

и я получаю его в dbgheap.c на этой линии:

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

Что странно, это работает с узлом, и я знаю, что там есть элементы (я проверил с помощью методов итерации TinyXML).

Кто-нибудь сталкивался с этим раньше?

ответ

1

просто ткнул в темноту, я не знаю tinyxml, но кажется, что dynamic_cast поступил не так. Если вы dynamic_cast <> указатель, вы получите NULL-указатель на ошибку. Однако, если вы применяете тип ссылки, нет понятия ссылки NULL, поэтому среда выполнения генерирует это исключение (или bad_type). MSDN on dynamic_cast, and why it can go wrong

Линия, которую вы вставили для исключения, не помогает устранить ситуацию, поскольку она идентифицирует симптом, а не причину.

Попытайтесь определить, кто поступил неправильно, вы сможете найти его, если подходите к стеку и находите последний метод в tinyxml libs или headers. Затем вы можете решить, является ли tinyxml worng, или вы просто применили его неправильно.

удачи!

0

Проект -> Свойства -> C/C++ -> Language -> Enable Run-Time Type Info

1

__non_rtti_object генерируется оператором dynamic_cast, если переданный указатель или ссылка не указывает на полиморфный объект, но к некоторому мусору вместо этого. Возможно, объект был удален ранее.

Пройдите код в отладчике и проверьте, где используется dynamic_cast и что передается ему.

hth Paavo

Смежные вопросы