C oder C++



  • basti431 schrieb:

    Meine überlegung war mich zuerst mit der Objekt-Orientierten Programmierung zu befassen (was ich ehrlichgesagt noch nie getan habe)....Deshalb dachte ich das es mir etwas bringen könnte wenn ich zuerst C++ lerne.

    um oop zu machen gibts besseres. frag z.b. mal u_ser-l, der würde dir smalltalk ans herz legen.

    basti431 schrieb:

    Ich benutze wie gesagt als Compierler VC++ 2008 express. Kann ich damit auch C programme compilieren oder brauch ich da einen anderen?

    das geht schon, aber er kann kein C99. für C99 könnteste z.b. pelles-C oder code->blocks mit mingw nehmen.

    basti431 schrieb:

    Aber nur so am rande. Warum ist cout so viel umständlicher als printf? Ich merke nur das es durch die vielen "<<" hässlicher ist

    bei printf haste am anfang 'nen format-string für die gesamte ausgabe. das z.b. macht printf leichter benutzbar und übersichtlicher. bei cout müssteste immer, wenn du die formatierung ändern willst, neue formatoptionen mit << dazwischenschieben. das ist ziemlich umständlich (im verhältnis zu printf).
    🙂



  • basti431 schrieb:

    Aber nur so am rande. Warum ist cout so viel umständlicher als printf? Ich merke nur das es durch die vielen "<<" hässlicher ist

    C

    printf("(%8.2f,%8.2f)\n", x, y);
    

    C++

    std::cout << "(" << std::setprecision(2) << std::setiosflags(std::ios::fixed) 
    		  << std::setw(8) << x << "," << std::setw(8) << y << ")" << endl;
    

    Also ich finde den C++ Code weitaus intuitiver und übersichtlicher! 🕶



  • Sorry da fehlt noch ein std:: vor endl sonst gibts 1012 Fehler.



  • Meine Beteiligung an der Debatte (welche Sprache fuer was besser ist und ueberhaupt das Grosse ganze) ist eine Antibeteiligung.



  • Was noch ein großer Pluspunkt an C++ ist, sind die übersichtlichen Fehlermeldungen durch den Compiler. So weiß man sofort, was wo schiefgelaufen ist.

    Also beispielsweise dieser Code

    #include <list>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    void foo( list<string>& x ) {
      sort(x.begin(),x.end()); // wrong iterator type
    }
    

    wird von dem C++ Compiler natürlich mit einer aussagekräftigen Meldung beanstandet:

    readply.cpp:109: conversion from ‘_List_iterator<list<basic_string<c
    har,string_char_traits<char>,__default_alloc_template<true,0> >,allo
    cator<basic_string<char,string_char_traits<char>,__default_alloc_tem
    plate<true,0> > > >,const list<basic_string<char,string_char_traits<
    char>,__default_alloc_template<true,0> >,allocator<basic_string<char
    ,string_char_traits<char>,__default_alloc_template<true,0> > > > &,c
    onst list<basic_string<char,string_char_traits<char>,__default_alloc
    _template<true,0> >,allocator<basic_string<char,string_char_traits<c
    har>,__default_alloc_template<true,0> > > > *>’ to non-scalar type ‘
    list<basic_string<char,string_char_traits<char>,__default_alloc_temp
    late<true,0> >,allocator<basic_string<char,string_char_traits<char>,
    __default_alloc_template<true,0> > > >’ requested/usr/lib64/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits/stl_algo.h: In func\
    tion ’void std::sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIterator = std\
    ::_List_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >]’:
    big-error.C:8: instantiated from here
    /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits/stl_algo.h:2829: er\
    ror: no match for ’operator-’ in ’__last - __first’
    /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits/stl_algo.h: In func\
    tion ’void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAc\
    cessIterator = std::_List_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<ch\
    ar> > >]’:
    /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits/stl_algo.h:2831: \
    instantiated from ’void std::sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessI\
    terator = std::_List_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >]’
    big-error.C:8: instantiated from here
    /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits/stl_algo.h:2436: er\
    ror: no match for ’operator-’ in ’__last - __first’
    /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits/stl_algo.h:2438: er\
    ror: no match for ’operator+’ in ’__first + 16’
    /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits/stl_algo.h:2439: er\
    ror: no match for ’operator+’ in ’__first + 16’
    /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits/stl_algo.h: In func\tion ’void std::__insertion_sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessIt\
    erator = std::_List_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >]’:
    /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits/stl_algo.h:2442: \
    instantiated from ’void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator) [w\
    ith _RandomAccessIterator = std::_List_iterator<std::basic_string<char, std::char_traits<char>, std:\
    :allocator<char> > >]’
    /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits/stl_algo.h:2831: \
    instantiated from ’void std::sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessI\
    terator = std::_List_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >]’
    big-error.C:8: instantiated from here
    /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits/stl_algo.h:2352: er\
    ror: no match for ’operator+’ in ’__first + 1’
    /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits/stl_algo.h:2442: \
    instantiated from ’void std::__final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator) [w\
    ith _RandomAccessIterator = std::_List_iterator<std::basic_string<char, std::char_traits<char>, std:\
    :allocator<char> > >]’
    /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits/stl_algo.h:2831: \
    instantiated from ’void std::sort(_RandomAccessIterator, _RandomAccessIterator) [with _RandomAccessI\
    terator = std::_List_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >]’
    big-error.C:8: instantiated from here
    /usr/lib64/gcc/x86_64-unknown-linux-gnu/4.2.1/../../../../include/c++/4.2.1/bits/stl_algo.h:2358: er\
    ror: no match for ’operator+’ in ’__i + 1’
    

    Die detaillierten Fehlerbeschreibungen und Warnungen der C++ Compiler können einem sehr viel Zeit bei der Fehlersuche ersparen. 😮



  • Da muss man mal vorher die Doku lesen, z.B. hier: http://www.sgi.com/tech/stl/sort.html . Da steht dann unter Requirements on types so Sachen (Nicht geeignet fuer Kinder unter drei Jahren).



  • C++ Rocks schrieb:

    Was noch ein großer Pluspunkt an C++ ist, sind die übersichtlichen Fehlermeldungen durch den Compiler. So weiß man sofort, was wo schiefgelaufen ist.

    Siehe Sig, erster Link.



  • C++ Rocks! Das hat doch nichts mit C++ zu tun, sondern (wie du selber schon richtig festgestellt hast) liegt es am Compiler - sprich am Tool.
    Der MSVC spuckt z.B. ganz andere Fehlermeldungen aus. Die vorallem meiner Erfahrung nach viel verständlicher sind. Weiterhin spuckt der MSVC z.B. zusätzlich Error-Codes aus (die der gcc nicht hat). Somit kann man den Error-Code in die MSDN eingeben, und dort stehen sehr ausführliche Beschreibungen und sogar Lösungsvorschläge zu den Errors!

    Wenn ich einen BASIC-Compiler benutze, der schreckliche und missverständliche Fehlermeldungen ausgibt, hilft es mir absolut nichts, wenn BASIC eine gute Anfängersprache ist. Der BASIC-Compiler ist dann halt Mist.

    Achja: Java ist die beste Sprache von der Welt! 😃



  • Artchi schrieb:

    Achja: Java ist die beste Sprache von der Welt!

    auf der welt, auf
    🙂



  • Entschuldige Artchi, du hast natürlich Recht. Die Meldungen des Visual Studio Compilers sind sogar noch aussagekräftiger 👍

    --------------------Configuration: fsdfsds - Win32 Release--------------------
    Compiling...
    fsdfsds.cpp
    C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(542) : error C2784: '_D __cdecl std::operator -(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : could not deduce temp
    late argument for 'const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &' from '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::c
    har_traits<char>,class std::allocator<char> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(542) : error C2784: '_D __cdecl std::operator -(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : could not deduce temp
    late argument for 'const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &' from '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::c
    har_traits<char>,class std::allocator<char> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(542) : error C2784: '_D __cdecl std::operator -(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : could not deduce temp
    late argument for 'const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &' from '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::c
    har_traits<char>,class std::allocator<char> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(542) : error C2784: '_D __cdecl std::operator -(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : could not deduce temp
    late argument for 'const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &' from '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::c
    har_traits<char>,class std::allocator<char> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(542) : 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<ch
    ar,struct std::char_traits<char>,class std::allocator<char> > > >::iterator' does not define this operator or a conversion to a type acceptable to the predefined operator
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const class std::basic_string<_E,_Tr,_A> &,const _E)' : could not deduce template argument for 'const cla
    ss std::basic_string<_E,_Tr,_A> &' from '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<cha
    r> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const class std::basic_string<_E,_Tr,_A> &,const _E)' : could not deduce template argument for 'const cla
    ss std::basic_string<_E,_Tr,_A> &' from '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<cha
    r> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const class std::basic_string<_E,_Tr,_A> &,const _E)' : could not deduce template argument for 'const cla
    ss std::basic_string<_E,_Tr,_A> &' from '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<cha
    r> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const class std::basic_string<_E,_Tr,_A> &,const _E)' : could not deduce template argument for 'const cla
    ss std::basic_string<_E,_Tr,_A> &' from '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<cha
    r> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const class std::basic_string<_E,_Tr,_A> &,const _E *)' : could not deduce template argument for 'const c
    lass std::basic_string<_E,_Tr,_A> &' from '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<c
    har> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const class std::basic_string<_E,_Tr,_A> &,const _E *)' : could not deduce template argument for 'const c
    lass std::basic_string<_E,_Tr,_A> &' from '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<c
    har> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const class std::basic_string<_E,_Tr,_A> &,const _E *)' : could not deduce template argument for 'const c
    lass std::basic_string<_E,_Tr,_A> &' from '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<c
    har> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const class std::basic_string<_E,_Tr,_A> &,const _E *)' : could not deduce template argument for 'const c
    lass std::basic_string<_E,_Tr,_A> &' from '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<c
    har> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const _E,const class std::basic_string<_E,_Tr,_A> &)' : could not deduce template argument for 'const ' f
    rom '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'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const _E *,const class std::basic_string<_E,_Tr,_A> &)' : could not deduce template argument for 'const  
    *' from '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'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const class std::basic_string<_E,_Tr,_A> &,const class std::basic_string<_E,_Tr,_A> &)' : could not deduc
    e template argument for 'const class std::basic_string<_E,_Tr,_A> &' from '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_tra
    its<char>,class std::allocator<char> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const class std::basic_string<_E,_Tr,_A> &,const class std::basic_string<_E,_Tr,_A> &)' : could not deduc
    e template argument for 'const class std::basic_string<_E,_Tr,_A> &' from '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_tra
    its<char>,class std::allocator<char> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const class std::basic_string<_E,_Tr,_A> &,const class std::basic_string<_E,_Tr,_A> &)' : could not deduc
    e template argument for 'const class std::basic_string<_E,_Tr,_A> &' from '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_tra
    its<char>,class std::allocator<char> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::basic_string<_E,_Tr,_A> __cdecl std::operator +(const class std::basic_string<_E,_Tr,_A> &,const class std::basic_string<_E,_Tr,_A> &)' : could not deduc
    e template argument for 'const class std::basic_string<_E,_Tr,_A> &' from '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_tra
    its<char>,class std::allocator<char> > > >::iterator'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2784: 'class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> __cdecl std::operator +(_D,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : could not deduce template arg
    ument for '' from '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'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\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<ch
    ar,struct std::char_traits<char>,class std::allocator<char> > > >::iterator' does not define this operator or a conversion to a type acceptable to the predefined operator
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(546) : error C2780: 'void __cdecl std::_Insertion_sort(_RI,_RI,_Pr)' : expects 3 arguments - 2 provided
            C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\algorithm(619) : see declaration of '_Insertion_sort'
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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:\Program Files\Microsoft Visual Studio\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<c
    har,struct std::char_traits<char>,class std::allocator<char> > > >::iterator' does not define this operator or a conversion to a type acceptable to the predefined operator
            C:\Program Files\Microsoft Visual Studio\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::allocato
    r<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::a
    llocator<class std::basic_string<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
    Error executing cl.exe.
    
    fsdfsds.obj - 23 error(s), 0 warning(s)
    


  • /fricky schrieb:

    Artchi schrieb:

    Achja: Java ist die beste Sprache von der Welt!

    auf der welt, auf
    🙂

    Auf der Erde, in der Welt. Von der Welt ist aber auch ok. Nur auf ist schlecht.
    http://de.wikipedia.org/wiki/Welt



  • C++ Rocks schrieb:

    fsdfsds.obj - 23 error(s), 0 warning(s)
    

    23 errors? sieht irgendwie nach viel mehr aus.
    🙂



  • Grandiose Fehlermeldungen. Irgendwas macht mein Compiler besser 😃

    E:\test>bcc32 test.cpp
    CodeGear C++ 6.13 f³r Win32 Copyright (c) 1993-2008 CodeGear
    test.cpp:
    Fehler E2093 E:\Programme\Tiburon\Include\dinkumware\algorithm 2062: 'operator-' ist im Typ 'list<string,allocator<string> >::iterator' für Argumente desselben Typs nicht implementiert in Funktion std::void sort<list<string,allocator<string> >::iterator>(list<string,allocator<string> >::iterator,list<string,allocator<string> >::iterator)
    Fehler E2285 E:\Programme\Tiburon\Include\dinkumware\algorithm 2062: Keine Übereinstimmung f³r '_Sort<_RanIt,_Diff,_Pr>(list<string,allocator<string> >::iterator,list<string,allocator<string> >::iterator,undefined)' gefunden in Funktion void sort<list<string,allocator<string> >::iterator>(list<string,allocator<string> >::iterator,list<string,allocator<string> >::iterator)
    *** 2 Fehler bei der Compilierung ***
    

    Was natürlich nichts am grundsätzlichen Problem ändert - der Fehler sollte im Anwendercode auftauchen und nicht in irgendeinem Template in der Standardbibliothek. Dafür bräuchte man Concepts - aber daraus wird ja nichts. Mit erweiterten Fehlerinformationen wird es immerhin ein wenig besser:

    E:\test>bcc32 -Q test.cpp
    CodeGear C++ 6.13 für Win32 Copyright (c) 1993-2008 CodeGear
    test.cpp:
    Fehler E2093 E:\Programme\Tiburon\Include\dinkumware\algorithm 2062: 'operator-' ist im Typ 'list<string,allocator<string> >::iterator' für Argumente desselben Typs nicht implementiert in Funktion std::void sort<list<string,allocator<string> >::iterator>(list<string,allocator<string> >::iterator,list<string,allocator<string> >::iterator)
     + Vollständiger Parser-Kontext
     + test.cpp, line 6: Analyse von: void foo(list<string,allocator<string> > &)
     + test.cpp, line 7: Entscheidung zum Instantiieren: void std::void sort<list<string,allocator<string> >::iterator>(list<string,allocator<string> >::iterator,list<string,allocator<string> >::iterator)
     + --- Zurücksetzen des Parser-Kontexts für die Instantiierung...
     + test.cpp, line 3: #include E:\Programme\Tiburon\Include\dinkumware\algorithm
     + E:\Programme\Tiburon\Include\dinkumware\algorithm, line 6: namespace std
    Fehler E2285 E:\Programme\Tiburon\Include\dinkumware\algorithm 2062: Keine Übereinstimmung für '_Sort<_RanIt,_Diff,_Pr>(list<string,allocator<string> >::iterator,list<string,allocator<string> >::iterator,undefined)' gefunden in Funktion void sort<list<string,allocator<string> >::iterator>(list<string,allocator<string> >::iterator,list<string,allocator<string> >::iterator)
     + Vollständiger Parser-Kontext
     + test.cpp, line 6: Analyse von: void foo(list<string,allocator<string> > &)
     + test.cpp, line 7: Entscheidung zum Instantiieren: void void sort<list<string,allocator<string> >::iterator>(list<string,allocator<string> >::iterator,list<string,allocator<string> >::iterator)
     + --- Zurücksetzen des Parser-Kontexts für die Instantiierung...
     + test.cpp, line 3: #include E:\Programme\Tiburon\Include\dinkumware\algorithm
     + E:\Programme\Tiburon\Include\dinkumware\algorithm, line 6: namespace std
    *** 2 Fehler bei der Compilierung ***
    


  • C++ Rocks!

    http://msdn.microsoft.com/de-de/library/wf867f8f(VS.80).aspx
    http://msdn.microsoft.com/de-de/library/sah8k6f4(VS.80).aspx

    Spätestens beim zweiten Error-Code weiß man, das da was nicht zusammen passt. Dann schaut man in die Std-Lib-Doku, und weiß das list eine eigene Sort-Funktion bereitstellt.

    Den Fehler begeht denke ich mal jeder Std-Lib-Anwender in seiner Anfangszeit. Den Fehler hatte ich damals auch gemacht, std::sort() mit list anwenden zu wollen. Nach einem Blick in der Doku habe ich das nach ein paar Sekunden korrigiert bekommen. Vorausgesetzt man weiß das es unterschiedliche Iterator-Kategorien gibt. Das sind aber C++-Basics!



  • wenn das basics sind, möchte ich ja nicht wissen mit was für fehlermeldungen sich der fortgeschrittene C++ programmierer so herumschlagen muß^^



  • C++ Rocks schrieb:

    Entschuldige Artchi, du hast natürlich Recht. Die Meldungen des Visual Studio Compilers sind sogar noch aussagekräftiger 👍

    ...
    std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::iterator'
    ...
    

    28 KB Fehlermeldung 👍 auf diesem Platz könnte man in Forth ein Betriebssystem programmieren, inkl. Compiler ... alternativ *n*x fahren, die PDP 11/20 hatte 1971 ungefähr so viel Speicher im Vollausbau 😃



  • mukuh schrieb:

    wenn das basics sind, möchte ich ja nicht wissen mit was für fehlermeldungen sich der fortgeschrittene C++ programmierer so herumschlagen muß^^

    Fehlermeldungen? Schön wärs 🙂



  • C++ Rocks schrieb:

    basti431 schrieb:

    Aber nur so am rande. Warum ist cout so viel umständlicher als printf? Ich merke nur das es durch die vielen "<<" hässlicher ist

    C

    printf("(%8.2f,%8.2f)\n", x, y);
    

    C++

    std::cout << "(" << std::setprecision(2) << std::setiosflags(std::ios::fixed) 
    		  << std::setw(8) << x << "," << std::setw(8) << y << ")" << endl;
    

    Also ich finde den C++ Code weitaus intuitiver und übersichtlicher! 🕶

    Ist doch interessant dass der kurze formatstring "(%8.2f,%8.2f)\n" ganze zwei Zeilen c++ code ersetzt.

    Das nenne ich mal minimalen Aufwand: Man braucht nur:
    cout, setprecision, setiosflags, ios::fixed, setw und 674594 '<<'s und schon hat man den format string ersetzt.

    🤡

    Diese Diskussion printf vs cout erinnert mich an folgendes Beispiel: Wegbeschreibung.

    C: Mit printf bekommt man die Wegbeschreibung in Form einer Karte, auf der man auf einen Blick alles überblicken kann.

    C++: Hier wird der weg manuell beschrieben ala "gehe gerade aus << drehe dich nach links << schau dich um ob kein Gegenverkehr kommt << fahre dann 40 meter << im Kreisverkehr die zweite raus [...]"

    😃 Also cout muss wohl ein wahren Pragmatiker entworfen haben.



  • Ist aber total irrelevant. Willst Du süße Formatierung, nimmst Du eh Klickibunti.
    Genauso die Länge mancher Fehlermeldungen. Die fallen in der Praxis gar nicht auf.



  • volkard schrieb:

    Genauso die Länge mancher Fehlermeldungen. Die fallen in der Praxis gar nicht auf.

    weils sie sowieso keiner liest. angeblich gibt's sogar tools, die fehler eines C++ compilers in menschenlesbare form übersetzen können (in eine zeile oder so).
    🙂


Anmelden zum Antworten