Am promis ca rapund punct cu punct.
Silviu Ardelean wrote:Ovidiu Cucu wrote:In general, erorile de compilare datorate STL-ului sunt "kilometrice" deci greu de "tradus".
Cam toate erorile C/C++ sunt mai greu de "tradus" pentru incepatori.
Da? O fi...
Sa zicem ca unui "incepator", compilatorul ii scuipa ceva de genul:
Compiling...
Console.cpp
C:\P\ VS60\VC98\INCLUDE\list(125) : warning C4786: '?$reverse_bidirectional_iterator@Viterator@?$list@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@V
?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@3@AAV43@PAV43@H' : identifier was truncated to '255' characters in the browser information
C:\Projects\Console_v6\Console_v6.cpp(10) : see reference to class template instantiation 'std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,st
ruct std::char_traits<char>,class std::allocator<char> > > >' being compiled
... am scurtat-o ca sa incapa pe forum; in total sunt 12 warning-uri si 23 erori, pe acelasi calapod...
C:\P\ VS60\VC98\INCLUDE\algorithm(546) : error C2676: binary '+' : 'class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<cha
r>,class std::allocator<char> > > >::iterator' does not define this operator or a conversion to a type acceptable to the predefined operator
C:\P\ VS60\VC98\INCLUDE\algorithm(539) : see reference to function template instantiation 'void __cdecl std::_Sort_0(class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator
<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::iterator,class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_stri
ng<char,struct std::char_traits<char>,class std::allocator<char> > > >::iterator,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)' being compiled
C:\P\ VS60\VC98\INCLUDE\algorithm(546) : error C2780: 'void __cdecl std::_Insertion_sort(_RI,_RI,_Pr)' : expects 3 arguments - 2 provided
C:\P\ VS60\VC98\INCLUDE\algorithm(619) : see declaration of '_Insertion_sort'
C:\P\ VS60\VC98\INCLUDE\algorithm(539) : see reference to function template instantiation 'void __cdecl std::_Sort_0(class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator
<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::iterator,class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_stri
ng<char,struct std::char_traits<char>,class std::allocator<char> > > >::iterator,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)' being compiled
C:\P\ VS60\VC98\INCLUDE\algorithm(547) : error C2676: binary '+=' : 'class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<ch
ar>,class std::allocator<char> > > >::iterator' does not define this operator or a conversion to a type acceptable to the predefined operator
C:\P\ VS60\VC98\INCLUDE\algorithm(539) : see reference to function template instantiation 'void __cdecl std::_Sort_0(class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator
<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::iterator,class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_stri
ng<char,struct std::char_traits<char>,class std::allocator<char> > > >::iterator,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *)' being compiled
Creating browse info file...
Console.exe - 23 error(s), 12 warning(s)
Clar ca-l apuca plansul si cheama un "avansat".
Avansatul, dupa ce incearca marea cu degetu (pardon, cu F1), da la dublu-clice pe erori si ajunge-aici:
Code: Select all
template<class _RI> inline
void sort(_RI _F, _RI _L)
{_Sort_0(_F, _L, _Val_type(_F)); }
template<class _RI, class _Ty> inline
void _Sort_0(_RI _F, _RI _L, _Ty *)
{if (_L - _F <= _SORT_MAX)
_Insertion_sort(_F, _L);
else
{_Sort(_F, _L, (_Ty *)0);
_Insertion_sort(_F, _F + _SORT_MAX);
for (_F += _SORT_MAX; _F != _L; ++_F)
_Unguarded_insert(_F, _Ty(*_F)); }}
template<class _RI, class _Ty> inline
void _Sort(_RI _F, _RI _L, _Ty *)
{for (; _SORT_MAX < _L - _F; )
{_RI _M = _Unguarded_partition(_F, _L, _Median(_Ty(*_F),
_Ty(*(_F + (_L - _F) / 2)), _Ty(*(_L - 1))));
if (_L - _M <= _M - _F)
_Sort(_M, _L, _Val_type(_F)), _L = _M;
else
_Sort(_F, _M, _Val_type(_F)), _F = _M; }}
template<class _RI, class _Ty> inline
_RI _Unguarded_partition(_RI _F, _RI _L, _Ty _Piv)
{for (; ; ++_F)
{for (; *_F < _Piv; ++_F)
;
for (; _Piv < *--_L; )
;
if (_L <= _F)
return (_F);
iter_swap(_F, _L); }}
template<class _RI> inline
void _Insertion_sort(_RI _F, _RI _L)
{_Insertion_sort_1(_F, _L, _Val_type(_F)); }
template<class _BI, class _Ty> inline
void _Insertion_sort_1(_BI _F, _BI _L, _Ty *)
{if (_F != _L)
for (_BI _M = _F; ++_M != _L; )
{_Ty _V = *_M;
if (!(_V < *_F))
_Unguarded_insert(_M, _V);
else
{copy_backward(_F, _M, _M + 1);
*_F = _V; }}}
"Vezi mah? aici ii buba! Nu-i clar?"
(probabil avansatul stie chineza iar asta-i floare la ureche).
In fine...
De unde crezi c-ar fi putut sa apara toate 12 + 23? De la 35 de stupizenii?
NU. In exemplu de mai sus, doar de la una singura:
Code: Select all
std::sort(list.begin(), list.end());
E doar un exemplu pe care l-am gasit pe net.
In lumea reala poti da de N stupizenii (unele mai subtile decat asta), fiecare scuipand M warning-uri si P erori.
Clar, daca nu-i neaparata nevoie (cazul in dicutie, daca scriem extensii MFC), nu-i bine sa ne legam la cap.
[ vor urma si celelalte puncte ]