DyntabCtrl / SOS an -> Phlox81
-
Hi,
ich habe ein großes Problem mit der ansonsten genialen DynTabCtrl-Klasse
(von Phlox81??).In diesem Codeteil:
BOOL DynTabCtrl::DeleteItem(int nItem) { if(nItem > 0 && nItem < m_tabs.size()) { if(CTabCtrl::DeleteItem(nItem)) { delete m_tabs[nItem]; m_tabs.erase(m_tabs[nItem]);//<--- SetCurFocus(0); m_aktuellepos = 0; m_tabs[0]->ShowWindow(SW_SHOW); m_tabs[0]->SetFocus(); m_tabs[0]->Invalidate(); return TRUE; } } return FALSE; }Die Meldung lautet:
Fehler 6 error C2664: 'std::_Vector_iterator<_Ty,_Alloc> std::vector<_Ty>::erase(std::_Vector_const_iterator<_Ty,_Alloc>)': Konvertierung des Parameters 1 von 'CDialog *' in 'std::_Vector_const_iterator<_Ty,_Alloc>' nicht möglich
Kann mir da jemand helfen? Unter VS 2003 kompiliert es wunderbar

Nur unter VS2008 Pro nicht.
-
Besorg Dir mal die aktuelle Version von DynTabCtrl
-> http://www.c-plusplus.net/forum/viewtopic-var-t-is-95946-and-start-is-1.html
da sieht DeleteItem() nämlich so aus:
BOOL DynTabCtrl::DeleteItem(int nItem) { if(nItem > -1 && nItem < m_tabs.size()) { if(CTabCtrl::DeleteItem(nItem)) { delete m_tabs[nItem]; m_tabs.erase(std::find(m_tabs.begin(),m_tabs.end(),m_tabs[nItem])); m_titel.erase(std::find(m_titel.begin(),m_titel.end(),m_titel[nItem])); if(!m_tabs.empty()) { SetCurFocus(0); m_aktuellepos = 0; m_tabs[0]->ShowWindow(SW_SHOW); m_tabs[0]->SetFocus(); m_tabs[0]->Invalidate(); return TRUE; } } } return FALSE; }
-
Vielen Dank für den Hinweis.
Ich habe die neue Version jetzt eingebunden erhalte nun aber
die Meldung, dass "find" kein Element von "std" ist.Dies betrifft die beiden Zeilen:
m_tabs.erase(std::find(m_tabs.begin(),m_tabs.end(),m_tabs[nItem])); m_titel.erase(std::find(m_titel.begin(),m_titel.end(),m_titel[nItem]));Nachdem ich #include <algorithm> in der DynTabCtrl.h zugefügt hatte
ging es dann auch.Als Anmerkung zum Destruktor sei gesagt, dass ein nerviges Geräusch
ertönt, wenn man die Anwendung beendet. Dies liegt an der dort
hinterlegten MessageBox, die man auskommentieren muss.DynTabCtrl::~DynTabCtrl() { if(!m_tabs.empty()) { for(int i =0; i < m_tabs.size(); i++)//vector freigeben { if(!m_tabs[i]->DestroyWindow()) //MessageBox("Freigeben des Tabsheets fehlgeschlagen"); delete m_tabs[i]; } m_tabs.clear();//vector leeren } }Diese Klasse von phlox81.de ist wunderbar. An dieser Stelle
vielen Dank an den Entwickler und alle die hier im Forum
so bereitwillig ihre Zeit opfern um einem zu helfen