Automatische Fehlermeldungs-Formatierung bei Templates



  • Guten Morgen,

    Bevor ich mich selbst dran mache, eine kleine Beschreibung meines Vorhabens.

    Mich nerven Dinger wie das hier:

    GCC 4.6.2 schrieb:

    error: use of deleted function 'slice_iter<__gnu_cxx::__normal_iterator<const FourWins::GameLogic::ConnectFourFigure*, std::vector<FourWins::GameLogic::ConnectFourFigure, std::allocatorFourWins::GameLogic::ConnectFourFigure > > >& slice_iter<__gnu_cxx::__normal_iterator<const FourWins::GameLogic::ConnectFourFigure*, std::vector<FourWins::GameLogic::ConnectFourFigure, std::allocatorFourWins::GameLogic::ConnectFourFigure > > >::operator=(const slice_iter<__gnu_cxx::__normal_iterator<const FourWins::GameLogic::ConnectFourFigure*, std::vector<FourWins::GameLogic::ConnectFourFigure, std::allocatorFourWins::GameLogic::ConnectFourFigure > > >&)'

    (Hier sieht das übrigens noch ok aus, aber nur weil es sich zufällig so gut formatiert dank dem Forum).

    Wahnsinn. Bei CodeBlocks unerträglich. Ich habe mir überlegt, ich schreibe ein Programm das es automatisch formatiert, wie ich es meistens im Editor mache:

    slice_iter
    <
    	__gnu_cxx::__normal_iterator
    	<
    		const FourWins::GameLogic::ConnectFourFigure*, 
    		std::vector
    		<
    			FourWins::GameLogic::ConnectFourFigure, std::allocator<FourWins::GameLogic::ConnectFourFigure> 
    		>
    	> 
    >& 
    
    slice_iter
    <
    	__gnu_cxx::__normal_iterator
    	<
    		const FourWins::GameLogic::ConnectFourFigure*, 
    		std::vector
    		<
    			FourWins::GameLogic::ConnectFourFigure, 
    			std::allocator<FourWins::GameLogic::ConnectFourFigure> 
    		> 
    	> 
    >::operator=(const slice_iter
                 <
                	__gnu_cxx::__normal_iterator
                 	<
               		const FourWins::GameLogic::ConnectFourFigure*, 
                		std::vector
                 		<
                			FourWins::GameLogic::ConnectFourFigure, 
                			std::allocator<FourWins::GameLogic::ConnectFourFigure> 
                		> 
                	> 
                >&)
    

    Man sieht direkt, also ich jedenfalls, der Zuweisungsoperator wurde nicht überladen bzw. wahrscheinlich implizit als deleted deklariert.

    Edit: Weitere Abkürzungen wären:

    • Die Parameterliste von std::allocator wird weggelassen.
    • ggf. Wird die komplette Parameterliste von __gnu_cxx::__normal_iterator und Konsorten weggelassen. Komplett. Die will auch keiner.

    Gibt es schon sowas ähnliches - sicher, oder?

    MfG

    Edit: Ich mach mich mal ran.


  • Mod

    Sone schrieb:

    Gibt es schon sowas ähnliches - sicher, oder?

    Ja, STLFilt und Konsorten.



  • SeppJ schrieb:

    Sone schrieb:

    Gibt es schon sowas ähnliches - sicher, oder?

    Ja, STLFilt und Konsorten.

    Und wo genau formatiert STLFilt "nur" irgendwas? Soweit ich sehe, ist es mehr oder weniger ein kompletter Compiler-Mod der sich auch noch beim Starten über ein fehlendes Python-Skript beschwert. 👎
    Ich wollte nur ein kleines Programm, dass mir den Input formatiert ausgibt. Schon ein Online Teil würde es tun.


  • Mod

    Sowas gibt's natürlich auch. Ich dachte die Information, dass es so etwas gibt, würde dir reichen, um diese Tools zu finden.



  • SeppJ schrieb:

    Ich dachte die Information, dass es so etwas gibt, würde dir reichen, um diese Tools zu finden.

    Aber die ersten Google-Treffer verweisen alle auf STLFilt. Ich bin Faul und du bist erfahren. Jetzt sag schon. 🤡


  • Mod

    Hier findest du mehrere Antworten, die nicht STLFilt sind:
    http://stackoverflow.com/questions/656420/is-there-any-way-to-get-readable-gcc-error-and-warning-output-at-the-command-lin

    Ich kann nicht sagen, ob sie bei deiner IDE einbaubar sind, aber sie filtern die typischen GCC-Meldungen.



  • Na gut, TextFilt sieht ganz gut aus.

    Edit: Kein Scherz! Das fand' ich eine Minute vor deinem Post!



  • Sone schrieb:

    Man sieht direkt, also ich jedenfalls, der Zuweisungsoperator wurde nicht überladen bzw. wahrscheinlich implizit als deleted deklariert.

    Sieht man das nicht schon vorher?

    use of deleted function blah

    reicht doch schon, um die Fehlermeldung zu verstehen.

    Und der GCC gibt sogar die Zeilennummer der entsprechenden Funktion an, wer mehr Info will, springt halt dorthin (zumindest meine IDE kann das).

    Wer versucht, die ganze Fehlermeldung durchzulesen und zu verstehen, der macht etwas falsch. Ich behaupte, die *Filt-Programme verleiten dazu und kosten einem schlussendlich nur noch mehr Zeit.



  • Nimm Clang. Der hat wunderschöne Fehlermeldungen!



  • errorempathie schrieb:

    Sone schrieb:

    Man sieht direkt, also ich jedenfalls, der Zuweisungsoperator wurde nicht überladen bzw. wahrscheinlich implizit als deleted deklariert.

    Sieht man das nicht schon vorher?

    use of deleted function blah

    reicht doch schon, um die Fehlermeldung zu verstehen.

    Nö. Dann fragt man sich, welche. Und dann guck ich durch die ganze Fehlermeldung durch.



  • Sone schrieb:

    errorempathie schrieb:

    Sone schrieb:

    Man sieht direkt, also ich jedenfalls, der Zuweisungsoperator wurde nicht überladen bzw. wahrscheinlich implizit als deleted deklariert.

    Sieht man das nicht schon vorher?

    use of deleted function blah

    reicht doch schon, um die Fehlermeldung zu verstehen.

    Nö. Dann fragt man sich, welche. Und dann guck ich durch die ganze Fehlermeldung durch.

    Oft kann man es aus dem Kontext erraten.
    Und sonst steht in der Fehlermeldung doch dabei, auf welcher Zeile die besagte Funktion ist. Klick -> Schon ist man auf der Funktionsdefinition und sieht, um welche es sich handelt.



  • clangfan schrieb:

    Nimm Clang. Der hat wunderschöne Fehlermeldungen!

    Nein, ich mag GCC. :p



  • Sone schrieb:

    SeppJ schrieb:

    Sone schrieb:

    Gibt es schon sowas ähnliches - sicher, oder?

    Ja, STLFilt und Konsorten.

    Und wo genau formatiert STLFilt "nur" irgendwas? Soweit ich sehe, ist es mehr oder weniger ein kompletter Compiler-Mod der sich auch noch beim Starten über ein fehlendes Python-Skript beschwert. 👎
    Ich wollte nur ein kleines Programm, dass mir den Input formatiert ausgibt. Schon ein Online Teil würde es tun.

    Du guckst nicht richtig.
    STLFilt filtert nur das was der Compiler ausgibt.
    Zur einfacheren Verwendung gibt's dann Proxy .exen die man verwenden kann um den Compiler aufzurufen und die zurückgegebenen Meldungen gleich schön formatiert ausgeben zu lassen. Der original Compiler wird dabei aber in keiner Weise verändert.



  • ...



  • Ich glaube, mein Haupt-Problem ist Code-Blocks, nicht GCC... 😃
    Das Panel, dass die Fehlermeldungen anzeigt, ist doof. Denke, der ein oder andere wird da zustimmen - die Fehlermeldungen sind alle nur in einer Zeile, erst im Build Log werden sie umgebrochen.

    Aber ich bin zu Faul alle Libs auf VS umzukonfigurieren. Besides, die C++11-Unterstützung ist eine Scheiße - sind variadic templates eigentlich überhaupt möglich? 😞

    Hier mal ein Bild: http://s7.directupload.net/images/130601/kcawarxt.png
    Und hier der Build-Log: http://s1.directupload.net/images/130601/ewjikfxt.png

    Versteht mich jetzt jemand?

    ~Übrigens, Swordfish, du bist erst ~26? Also ist es für unsere Liebe noch nicht zu spät.~



  • Swordfish schrieb:

    Sone schrieb:

    clangfan schrieb:

    Nimm Clang. Der hat wunderschöne Fehlermeldungen!

    Nein, ich mag GCC. :p

    gcc-concepts?

    Was ist das? Meinst du ConceptGCC? Ich denke nicht.

    Ah, ich weiß. Es findet sich zwar nichts auf google, aber ich weiß genau was du meinst.
    Das hier ist der Anfangs-Codeausschnitt aus dem Funktionstemplate std::search_n .

    // concept requirements
          __glibcxx_function_requires(_ForwardIteratorConcept<_ForwardIterator>)
          __glibcxx_function_requires(_EqualOpConcept<
    	typename iterator_traits<_ForwardIterator>::value_type, _Tp>)
    

    Und was bringt mir das?



  • ...



  • Sone schrieb:

    clangfan schrieb:

    Nimm Clang. Der hat wunderschöne Fehlermeldungen!

    Nein, ich mag GCC. :p

    Solange du kein OpenMP verwendest, nimm Clang.

    Ansonsten überlege ich mir, ob ich für meine Standard template parameter einfach ein sed script implementiere, das die langen Namn durch ihre typedefs im Code ersetzt. Viel besser als umformatieren.



  • Ich höre so viel positives über Clang. Wenn ich jetzt mein Projekt mit Ogre3D habe, kann ich einfach den GCC 4.6.2 durch Clang ersetzen ? Ich glaube nicht.

    Ich downloade es mir trotzdem. Und ich brauche endlich wieder ein neues Linux. 😃



  • FourWins

    Nur so am Rande: "Vier gewinnt" nennt man auf englisch "Connect Four".
    🙂


Log in to reply