Dyntabctrl in VS2005



  • Unter Project-Properties-> Configuration Properties
    ist unter Character Set : Use Multi-Byte Character Set eingestellt
    daran kann es nicht liegen

    oder meinst Du eine ander Einstellung ?



  • Nein, meine ich nicht, war halt bei mir beim Umstieg oft das Problem. Bei genauerem hinsehen kanns auch nicht wirklich daran liegen, aber mir fällt leider auch nicht mehr dazu ein.



  • versuch mal std::find(vec.begin(),vec.end(),CString*);

    Offenbar will er da den Iterator genau haben.
    Ich hab allerdings kein VS2005, und kanns daher auch nicht 100%ig sagen.

    phlox



  • Danke für die Antwort

    Kannst Du das ein wenig näher ausführen
    Ich verstehe den Hinweis nicht . 😕

    Gruß Linus



  • Habe heute genau dasselbe Problem. Gibts eine Lösung dazu?



  • Hm wie oben bereits gesagt eine mögliche Lösung wäre:

    m_tabs.erase(std::find(m_tabs.begin(),m_tabs.end(),m_tabs[item]));
    

    Da er hier den Pointertypen nicht in den iteratortypen übersetzen kann.

    phlox



  • "find" ist leider kein Member von std 😞



  • JPSelter schrieb:

    "find" ist leider kein Member von std 😞

    <algorithm> includieren...



  • Danke für die Antwort

    wenn ich den Source entsprechend ändere kommt jetzt

    error C2039: 'find' : is not a member of 'std'
    ...

    und einiges mehr

    Kann es sein ,dass sich etwas bzgl der namespaces geändert hat?
    (hatte irgandwann mal etwas gelesen weis aber nicht mehr wo )



  • Nein, find ist nachwievor in std.
    Hast du algorithm includiert?

    ansonsten könnte man auch find ersetzen durch:

    std::vector<CDialog*>::iterator beg,end;
    beg = m_tabs.begin();
    end = m_tabs.end();
    for(;beg != end && *beg != m_tabs[nItem];beg++);
    if(beg != end)
      m_tabs.erase(beg);
    

    phlox



  • Prima, die erste Fehlerzeile (m_tabs) ist verschwunden, bleibt nur noch Zeile 2 (m_titel):

    m_tabs.erase(std::find(m_titel.begin(),m_titel.end(),m_titel[nItem]));
    

    Da kommt die Meldung

    d:\c++ projekte\pmd toolbox newkernel\dyntabctrl.cpp(128) : error C2664: 'std::_Vector_iterator<_Ty,_Alloc> std::vector<_Ty>::erase(std::_Vector_iterator<_Ty,_Alloc>)' : cannot convert parameter 1 from 'ATL::CStringT<BaseType,StringTraits>' to 'std::_Vector_iterator<_Ty,_Alloc>'
            with
            [
                _Ty=CString,
                _Alloc=std::allocator<CString>
            ]
            and
            [
                BaseType=char,
                StringTraits=StrTraitMFC_DLL<char>
            ]
            and
            [
                _Ty=CString,
                _Alloc=std::allocator<CString>
            ]
            No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
    


  • JPSelter schrieb:

    Prima, die erste Fehlerzeile (m_tabs) ist verschwunden, bleibt nur noch Zeile 2 (m_titel):

    m_tabs.erase(std::find(m_titel.begin(),m_titel.end(),m_titel[nItem]));
    

    Da kommt die Meldung

    Ich denke dort musst Du ebenfalls schreiben:

    m_titel.erase(std::find(m_titel.begin(),m_titel.end(),m_titel[item]));
    

    @ phlox81
    ich bekomme jetz nur immer folgende Fehlermeldungen:

    c:\..\DynTabCtrl.h(47) : error C2061: syntax error : identifier 'vec'
    c:\..\DynTabCtrl.h(47) : error C2059: syntax error : ')'
    c:\..\DynTabCtrl.h(47) : error C2143: syntax error : missing ')' before ';'
    c:\..\DynTabCtrl.h(47) : error C2838: 'find' : illegal qualified name in member declaration
    ...(3mal)
    ...
    .\DynTabCtrl.cpp(24) : warning C4018: '<' : signed/unsigned mismatch
    .\DynTabCtrl.cpp(65) : warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data
    .\DynTabCtrl.cpp(71) : warning C4018: '>' : signed/unsigned mismatch
    .\DynTabCtrl.cpp(116) : warning C4018: '<' : signed/unsigned mismatch
    .\DynTabCtrl.cpp(122) : error C2065: 'item' : undeclared identifier
    .\DynTabCtrl.cpp(156) : error C2065: 'point' : undeclared identifier
    .\DynTabCtrl.cpp(162) : error C2228: left of '.x' must have class/struct/union
            type is ''unknown-type''
    .\DynTabCtrl.cpp(162) : error C2228: left of '.y' must have class/struct/union
            type is ''unknown-type''
    

    😕 ich blick nicht mehr durch 😕
    help



  • Das habe ich dort ja stehen und bekomme diese Fehlermeldung. Du musst "item" natürlich noch durch "nItem" ersetzen. Ich bin kurz vor dem Ziel, ich spüre es. Bloss lässt sich diese 2.Zeile (m_titel) nicht so wie Zeile 1 (m_tab) austauschen, weil m_titel kein Pointer ist sondern ein CString, das ist der Unterschied. Aber wie muss nun diese 2.Zeile heissen?

    BOOL DynTabCtrl::DeleteItem(int nItem)
    {
    	if(nItem > -1 && nItem < (int)m_tabs.size()) // edit by Peter Selter (signed/unsigned mismatch)
    	{
    		if(CTabCtrl::DeleteItem(nItem))
    		{
    			delete m_tabs[nItem];
    			m_tabs.erase(std::find(m_tabs.begin(),m_tabs.end(),m_tabs[nItem])); // das meine ich mit 1.Zeile (ok)
    			m_tabs.erase(std::find(m_titel.begin(),m_titel.end(),m_titel[nitem])); // das meine ich mit 2.Zeile (error)
    			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;
    }
    

    Du darfst ausserdem ein

    #include <algorithm>
    

    in DynTabCtrl.h nicht vergessen.



  • Ich hab wohl bei all meinenm Herumexperimentieren einiges
    verloren . Habe den Source von phlox81 noch einma eingebaut
    und entsprechend geändert

    jetzt bekomme ich den gleichen Fehler 🤡



  • wer in m_titel sucht, sollte auch in m_titel löschen 😉

    m_titel.erase(std::find(m_titel.begin(),m_titel.end(),m_titel[nitem]));
    


  • Hoppla 🙂 Jetzt gehts, danke für Deine Hilfe!



  • aua

    danke



  • Hi,
    ich würde mich freuen wenn jemand dieses kleine framework was jetzt auf .Net läuft
    zum download bereitstellen würde! 😋
    Ich brauche es auch 🙂

    lg
    pixel



  • pixel schrieb:

    Hi,
    ich würde mich freuen wenn jemand dieses kleine framework was jetzt auf .Net läuft
    zum download bereitstellen würde! 😋
    Ich brauche es auch 🙂

    lg
    pixel

    die neue Version ist bereits online:
    DynTabCtrl

    phlox



  • hi, supper! Danke!
    👍
    lg
    pixel


Anmelden zum Antworten