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 👍


Anmelden zum Antworten