C oder C++
-
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.
-
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).
-
/fricky schrieb:
weils sie sowieso keiner liest.
Du hast Recht, meistens reicht es, die erste Fehlermeldung zu lesen.
-
Nexus schrieb:
/fricky schrieb:
weils sie sowieso keiner liest.
Du hast Recht, meistens reicht es, die erste Fehlermeldung zu lesen.
Und oft reicht es, nur die Fehlerzeile zu wissen.
Bei den Monstern kommt in meinem Hirn nur "Templatefehler" an und dann schaue ich, was im Code an dieser Zeile einen Templatefehler macht.
-
Im neuen Standard gibt es doch static_assert. Könnte man dann die Fehlermeldung nicht wesentlich besser gestalten. Z.B.:
Incompatible iterator types. Expected: random access; Used: bidirectional
Vielleicht ists ja sogar im Visual C++ 2010 schon eingebaut (static_assert wird ja unterstützt).
-
Ohne Python und C++ gegenüberstellen zu wollen, aber die python exceptions sind deutlich aussagekräftiger. Okay, ich muss eingestehen, die exceptions sind auch runtime-Meldungen.
Aber prinzipiell hat C++Rocks recht mit seinem Sarkasmus.
-
Ich hab schon öfters gehört, daß die meisten C++ Programmierer die Fehlermeldungen des Compilers nicht verstehen und quasi solange am Code rumpantschen, bis er dann irgendwann kompiliert
-
Rµfus schrieb:
Ich hab schon öfters gehört, daß die meisten C++ Programmierer die Fehlermeldungen des Compilers nicht verstehen und quasi solange am Code rumpantschen, bis er dann irgendwann kompiliert
Wieso kommen eigentlich alle Postings mit fricky-Niveau von unregs?
-
volkard schrieb:
Rµfus schrieb:
Ich hab schon öfters gehört, daß die meisten C++ Programmierer die Fehlermeldungen des Compilers nicht verstehen und quasi solange am Code rumpantschen, bis er dann irgendwann kompiliert
Wieso kommen eigentlich alle Postings mit fricky-Niveau von unregs?
Glaube die Krankheit nennt man Schizophrenie :D!
-
Schon mal auf die abwegige Idee gekommen, dass es mehr Menschen (als "nur" fricky) auf der Welt gibt, die weniger zufrieden mit C++ sind?
-
volkard schrieb:
Wieso kommen eigentlich alle Postings mit fricky-Niveau von unregs?
keine ahnung. vielleicht sind registrierte in der mehrzahl traditionsbewusste spiessbürger, die an altem kram festhalten, egal wie nutzlos wer mittlerweile ist?
ein anderer unreg schrieb:
Schon mal auf die abwegige Idee gekommen, dass es mehr Menschen (als "nur" fricky) auf der Welt gibt, die weniger zufrieden mit C++ sind?
irgendwie scheinen es auch immer mehr zu werden. diese ganzen threads in letzter zeit, zu dem thema, finde ich schon bemerkenswert. die waren früher viel seltener.
-
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ß^^
Fortgeschrittene machen solche Fehler nicht mehr.
-
Artchi schrieb:
Fortgeschrittene machen solche Fehler nicht mehr.
fortgeschrittene machen auch fehler, vielleicht seltener, dafür aber wohl viel diffizilere.
-
Natürlich machen Fortgeschrittene Fehler. Aber es sind meistens Laufzeitfehler. Den sort-list-Fehler von oben macht man genau einmal! Der wird einem ewig im Gedächtnis bleiben! Das meinte ich mit, das ein Fortgeschrittener diesen Fehler nicht mehr machen wird. Wer immer wieder std::sort auf list anwendet, weil er immer wieder darauf rein fällt und dann ewig am rätseln ist, sollte den Job als Programmierer an den Nagel hängen.