Re: Пропадает std::list
От: crable США  
Дата: 05.12.05 12:12
Оценка:
Здравствуйте, ef1, Вы писали:

ef1>Не подскажете, запутался:

ef1>в своем классе определяю лист
ef1>
ef1>typedef std::list<CAcadDocumentWrapper> lDocumentsList;       
ef1>    lDocumentsList mListDocs;    
ef1>typedef std::list <CAcadDocumentWrapper>::iterator Iter;
ef1>        Iter IterDocs;
ef1>typedef std::list <CAcadDocumentWrapper>::const_iterator ConstIter;
ef1>    ConstIter pIterADoc;
ef1>

И зачем typedef, если все равно им не пользуешься?

ef1>в листе храняться врапперы COM интерфейса Document сервера AutoCAD, и в моем классе есть функция работающая с этим листом

ef1>
ef1>void CMyAutoCAD::Refresh()
ef1>{ 
ef1>...
ef1>    if (!mListDocs.empty())
ef1>    {                                                                        
ef1>    for (pIterDocs = mListDocs.begin(); pIterDocs != mListDocs.end(); pIterDocs++ )
ef1>        {
ef1>        if (pIterDocs!=pIterADoc)
ef1>        mListDocs.erase(pIterDocs); //После erase, pIterDocs больше некорректен, и делать с ним ничего нельзя, в т.ч. инкремент.
ef1>            }
ef1>    }
ef1>    else
ef1>...
ef1>

ef1>и получается когда я вызываю функцию Refresh() из своего (родительского) класса — все работает массив заполняется/удаляется/имеет размер, а когда я затем вызываю ее-же из класса (определеного в родительском как указатель на класс обрабатывающий события сервера) через указатель на родительский — list оказывается неинициализирован и работать с ним нельзя, а почему?? (вылетает уже на строчке с проверкой листа на то что он не пустой)

Исправь Refresh (см. комментарий в коде), если не поможет, приведи минимальный код с проблемой.
The last good thing written in C was Franz Schubert's Symphony No. 9.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.