Dyntabctrl in VS2005
-
Hi Leute
Ich habe in VC++.NET erfolgreich mit Dyntabctrl gearbeitet.
Nun habe ich diese Projekt in VS 2005 prof übernommen und bekomme
jetzt folgende Fehlermeldung:\DynTabCtrl.cpp(121) : error C2664: 'std::_Vector_iterator<_Ty,_Alloc> std::vector<_Ty>::erase(std::_Vector_iterator<_Ty,_Alloc>)' : cannot convert parameter 1 from 'CDialog **__w64 ' to 'std::_Vector_iterator<_Ty,_Alloc>' 1> with 1> [ 1> _Ty=CDialog *, 1> _Alloc=std::allocator<CDialog *> 1> ] 1> No constructor could take the source type, or constructor overload resolution was ambiguous 1>.\DynTabCtrl.cpp(122) : 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> *__w64 ' to 'std::_Vector_iterator<_Ty,_Alloc>' 1> with 1> [ 1> _Ty=CString, 1> _Alloc=std::allocator<CString> 1> ] 1> and 1> [ 1> BaseType=char, 1> StringTraits=StrTraitMFC_DLL<char> 1> ] 1> and 1> [ 1> _Ty=CString, 1> _Alloc=std::allocator<CString> 1> ] 1> No constructor could take the source type, or constructor overload resolution was ambiguousKann mir da jemand weiterhelfen ?
Vielen Dank im Vorraus
Gruß Linus
-
Versuch mal in den Projekteinstellungen von unicode auf mbcs umzustellen.
-
Unter Project-Properties-> Configuration Properties
ist unter Character Set : Use Multi-Byte Character Set eingestellt
daran kann es nicht liegenoder 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ändertjetzt 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
pixeldie neue Version ist bereits online:
DynTabCtrlphlox