C oder C++
-
danke für die antworten. das ich auf den µC`s nur C brauchen werde dachte ich mir schon. Aber ich will auch hauptsächlich anwendungen schreiben die dann auf dem normalen PC laufen um bsp. die messwerte der AD-wandler darzustellen.
Meine überlegung war mich zuerst mit der Objekt-Orientierten Programmierung zu befassen (was ich ehrlichgesagt noch nie getan habe). Mit der Funktionsbasierten programmierung bin ich einigermaßen vertraut. Deshalb dachte ich das es mir etwas bringen könnte wenn ich zuerst C++ lerne.
Ich benutze wie gesagt als Compierler VC++ 2008 express. Kann ich damit auch C programme compilieren oder brauch ich da einen anderen?
Ich habe neulich ein c++ tutorial angefangen. (http://www.cpp-tutor.de)
Das werde ich jetzt erstmal komplett durcharbeiten. Dann werde ich mir versuchen in der Sprache C einen Grundstock anzueignen (ich hab vor Jahren schon mal mit C angefangen, ich erinnere mich noch etwas).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
.
mfg.
Sebastian
-
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).aspxSpä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.