C oder C++
-
Hallo,
zuersteinmal möchte ich mich entschuldigen das ich dieses Thema im C++ Forum erstelle. Aber ich habe kein anderes gefunden was eher passend zu meiner Frage wäre.So nun zu meiner Frage. Ich mache aktuell eine Ausbildung zum Elektroniker und plane später auch E-Technik zu studieren.
In meiner Ausbildung habe ich gelernt durchaus schon komplexere Programme für Mikrocontroler zu schreiben. Jedoch nur in Asambler. Ich möchte jetzt gerne eine hochsprache zusätzlich lernen. da beim Studium später C auf mich wartet möchte ich nicht mit Basic (BASCOM compieler u.ä.) anfangen sondern mich lieber an den industriestandart halten.Außerdem möchte ich für den PC anwendungen schreiben die dann zum beispiel über den COM port mit meinen Mikrocontrollern "reden".
Welche von beiden sprachen ist jetzt sinnvoller zuerst zu lernen? (ich möchte mir definitiv beide aneignen).
Als compieler verwende ich die Expressversion von Visual Studio 2008. (für windowsprogramme).
Danke für eure hilfe.
Sebastian
-
Je besser Du bist, desto wahrscheinlicher ist es, daß Du davon profitierst, erst C und dann C++ zu lernen.
Egal, mit welcher Du anfängst, halte auch ein Auge auf der anderen Sprache. So kannst Du zum Beispiel eigentlich mit C anfangen, aber heimlich einen C++-Compiler dazu benutzen und für Ausgaben cout verwenden, oder die praktischen Dateiströme nehmen, obwohl der ganze Rest deiner Programme nur C verwendet. Und wenn Du mit C++ anfängst, schau auch immer mal, wie man das in C gelöst hätte. Gelegentlich ist es einfach gut, "mal runterzukommen". Und dann mußt Du die Unterschiede im Stil herausfinden, es gibt Sachen aus C, die in C++ Sünde sind (zum Beispiel Makros für Konstanten) und Sachen aus C++, die in C Sünde sind (zum Beispiel bei offener Datei mittenraus die Funktion verlassen).Außerdem verschieb ich den Thread mal nach RudP, damit die C-Programmierer ihn auch finden.
-
Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Dann musst du natürlich C lernen, C++ bringt dir für solche Dinge gar nichts. Ich studiere etwas sehr ähnliches und mit C++ befasst man sich in unserem Berufsfeld sogut wie gar nicht. Mikrocontroller, Treiber, Kernel- und Hardwarezeugs, RTOS, etc. das geht alles in C. Alle lowlevel Programmierer nutzen C und C++ nutzt in diesem Bereich kein Schwein. fricky wird dir auch noch einiges erzählen können, denn soweit ich weiss, arbeitet er schon in diesem Bereich
-
basti431 schrieb:
Welche von beiden sprachen ist jetzt sinnvoller zuerst zu lernen? (ich möchte mir definitiv beide aneignen).
dann zuerst C, denn das wirste wohl eher brauchen, wenn du mit µCs arbeitest. C++ könntest theoretisch auch nehmen, musst aber sehr vorsichtig sein und ganz genau wissen, was du tust (in bezug auf die sprache und ihre libs, was auf pc-plattformen egal ist, weil 1MB speicherverbrauch mehr oder weniger keine rolle spielen). es gibt da noch 'ne abgespeckte variante: http://en.wikipedia.org/wiki/Embedded_C%2B%2B aber die ist doof, benutzt auch kaum einer.
volkard schrieb:
So kannst Du zum Beispiel eigentlich mit C anfangen, aber heimlich einen C++-Compiler dazu benutzen
schlechte idee. oft vertragen C++-compiler kein C. das ist seit C99 sogar noch schlimmer geworden. und wenn du C-code hinbiegst, so dass er C++ verträglich wird, verschlechterste ihn dramatisch (z.b. casten von void*-rückgabewerten, überall #ifdef __cplusplus, usw).
volkard schrieb:
...und für Ausgaben cout verwenden,
unsinn. printf ist viel angenehmer zu verwenden, übersichtlicher, leichter zu lesen, usw. wenn ich c++ progger wäre, würde ich 'cout' meiden wie die pest. ich würde dann eher was 'printf'-ähnliches aus boost benutzen.
Techniker-_- schrieb:
Alle lowlevel Programmierer nutzen C und C++ nutzt in diesem Bereich kein Schwein.
C++ hätte wohl 'ne chance gehabt, auf grossen controllern (derer ja immer mehr werden) fuß zu fassen. aber der neue standard dürfte die zurückhaltung des embedded-volks vor C++ noch verstärkt haben, so dass wahrscheinlich daraus nix wird.
-
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!