Jetzt kommt es auf die Länge an!



  • Hallo,
    mit dem Wochenende ist mir nach Spaß zumute, daher wollte ich hier einmal den Linker-Fehlern ein Monument basteln. Postet einfach mal die etwas längeren Linker-Fehler, die euch so über den Weg laufen!

    Ich mache mal den Anfang:

    7>tool_subtract.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl SubtractBezier<class utility::sequence<class utility::point_iterator<class utility::detail::element_iterator<class types::FloatT<double> const ,struct utility::tags::major_tag>,class utility::detail::element_iterator<class types::FloatT<double>,struct utility::tags::major_tag>,class types::FloatT<double> const ,class types::FloatT<double> &> >,class utility::sequence<class std::_Vector_iterator<class std::_Vector_val<struct std::_Simple_types<class blc::BVertexT<float> > > > >,class utility::point_iterator<class utility::detail::element_iterator<class types::FloatT<double> const ,struct utility::tags::major_tag>,class utility::detail::element_iterator<class types::FloatT<double>,struct utility::tags::major_tag>,class types::FloatT<double> const ,class types::FloatT<double> &> >(class utility::sequence<class utility::point_iterator<class utility::detail::element_iterator<class types::FloatT<double> const ,struct utility::tags::major_tag>,class utility::detail::element_iterator<class types::FloatT<double>,struct utility::tags::major_tag>,class types::FloatT<double> const ,class types::FloatT<double> &> >,class utility::sequence<class std::_Vector_iterator<class std::_Vector_val<struct std::_Simple_types<class blc::BVertexT<float> > > > >,class utility::point_iterator<class utility::detail::element_iterator<class types::FloatT<double> const ,struct utility::tags::major_tag>,class utility::detail::element_iterator<class types::FloatT<double>,struct utility::tags::major_tag>,class types::FloatT<double> const ,class types::FloatT<double> &>)" (??SubtractBezier@V?SubtractBezier@V?sequence@V?point_iterator@V?point\_iterator@V?element_iterator@$$CBV?FloatT@N@types@@Umajor_tag@tags@utility@@@detail@utility@@V?FloatT@N@types@@Umajor\_tag@tags@utility@@@detail@utility@@V?element_iterator@V?FloatT@N@types@@Umajor_tag@tags@utility@@@23@FloatT@N@types@@Umajor\_tag@tags@utility@@@23@CBV?CBV?FloatT@N@types@@AAV56@@utility@@@utility@@V?sequence@V?sequence@V?_Vector_iterator@V?_Vector_val@U?\_Vector\_val@U?_Simple_types@V?BVertexT@M@blc@@@std@@@std@@@std@@@2@V?BVertexT@M@blc@@@std@@@std@@@std@@@2@V?point_iterator@V?element_iterator@element\_iterator@CBV?CBV?FloatT@N@types@@Umajor_tag@tags@utility@@@detail@utility@@V?element_iterator@V?element\_iterator@V?FloatT@N@types@@Umajor_tag@tags@utility@@@23@$$CBV?FloatT@N@types@@AAV56@@2@@@YAXV?FloatT@N@types@@AAV56@@2@@@YAXV?sequence@V?point_iterator@V?point\_iterator@V?element_iterator@$$CBV?FloatT@N@types@@Umajor_tag@tags@utility@@@detail@utility@@V?FloatT@N@types@@Umajor\_tag@tags@utility@@@detail@utility@@V?element_iterator@V?FloatT@N@types@@Umajor_tag@tags@utility@@@23@FloatT@N@types@@Umajor\_tag@tags@utility@@@23@CBV?CBV?FloatT@N@types@@AAV56@@utility@@@utility@@V?sequence@V?sequence@V?_Vector_iterator@V?_Vector_val@U?\_Vector\_val@U?_Simple_types@V?BVertexT@M@blc@@@std@@@std@@@std@@@1@V?BVertexT@M@blc@@@std@@@std@@@std@@@1@V?point_iterator@V?element_iterator@element\_iterator@CBV?CBV?FloatT@N@types@@Umajor_tag@tags@utility@@@detail@utility@@V?element_iterator@V?element\_iterator@V?FloatT@N@types@@Umajor_tag@tags@utility@@@23@$$CBV?$FloatT@N@types@@AAV56@@1@@Z)" in Funktion ""public: virtual void __thiscall edit_tools::detail::XNBezierSubtract::Do(void)" (?Do@XNBezierSubtract@detail@edit_tools@@UAEXXZ)".

    Viele Grüße und viel Spaß,
    Deci

    edit: code-tags zu quote-tags gemacht, damit die seite nicht viel zu breit wird.



  • Biete einen Linkerfehler mit mehr als 15 Milliarden Zeichen Länge.
    Am besten in der Kommandozeile machen, könnte sein, daß die IDE dabei ein wenig abkackt.

    #include <map>
    
    template<int n>
    struct Foo{
        typedef std::map<unsigned,typename Foo<n-1>::bar> bar;
    };
    
    template<>
    struct Foo<0>{
        typedef unsigned bar;
    };
    
    void f(Foo<27>::bar*);
    
    int main(){
        f(0);
    }
    

    Mit 3 statt 27 als magic number sieht er so aus:

    /tmp/ccdW8fLl.o: In function `main': main.cpp:(.text+0xa): undefined reference to 
    `f(std::map<unsigned int, std::map<unsigned int, std::map<unsigned int, 
    unsigned int, std::less<unsigned int>, std::allocator<std::pair<unsigned 
    int const, unsigned int> > >, std::less<unsigned int>, std::allocator<std::pair<
    unsigned int const, std::map<unsigned int, unsigned int, std::less<unsigned 
    int>, std::allocator<std::pair<unsigned int const, unsigned int> > > > > >, 
    std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::map<
    unsigned int, std::map<unsigned int, unsigned int, std::less<unsigned int>, 
    std::allocator<std::pair<unsigned int const, unsigned int> > >, std::less<
    unsigned int>, std::allocator<std::pair<unsigned int const, std::map<
    unsigned int, unsigned int, std::less<unsigned int>, std::allocator<std::pair<
    unsigned int const, unsigned int> > > > > > > > >*)'
    collect2: ld returned 1 exit status
    


  • Ach das ist doch gemein. Also ohne template-Rekursion! 😃



  • Decimad schrieb:

    Ach das ist doch gemein. Also ohne template-Rekursion! 😃

    Ähm. Dann ist es aber ein TGGC-Rätsel. Einfach, wer am meisten reintippt. Also die 27 Zeilen der Rekursion per Hand rein und gut ist es. Und irgendwie einen Anflug von Sinnhaftigkeit hineinweben.

    #include <map>
    #include <string>
    #include <unordered_map>
    #include <vector>
    using namespace std;
    
    typedef pair<string,vector<string>> dictionary_entry;
    typedef map<string,dictionary_entry> dictionary;
    typedef unordered_map<string,dictionary> accellerated_dictionary;
    typedef vector<accellerated_dictionary> language;
    typedef language* hint_language(string);
    
    hint_language* set_hint_language_provider(hint_language*);
    
    int main(){
        set_hint_language_provider(0);
    }
    


  • Naja, ich war irgendwie davon ausgegangen, dass sich niemand die Mühe machen würde, hier künstlich Linker-Fehler zu produzieren. Hatte gehofft, dass eher Linker-Fehler aus der praktischen Produktion hier auftauchen, und viel davon mit Boost zu tun hat 😉



  • Decimad schrieb:

    Naja, ich war irgendwie davon ausgegangen, dass sich niemand die Mühe machen würde, hier künstlich Linker-Fehler zu produzieren. Hatte gehofft, dass eher Linker-Fehler aus der praktischen Produktion hier auftauchen, und viel davon mit Boost zu tun hat 😉

    Ups. Ich hatte

    daher wollte ich hier einmal den Linker-Fehlern ein Monument basteln

    so interpretiert, daß Du den oben schon gebastelt hättest.



  • Nene, der hat mich heute morgen zufällig beim Erzeugen angelächelt 😉



  • Da kannte ich mal einen Programmierer bei einem staatsnahen Unternehmen. Der liess sich bei jedem Programmlauf einen kompletten Hexdump ausdrucken und kiloweise auf Papier an den Arbeitsplatz bringen. Es waren jeweils Rollwagen erforderlich. Wer will denn so etwas noch? 😕



  • Was hat er damit denn angefangen? 😕

    Edit: Der stand doch bestimmt auf die Bürohilfe?



  • Decimad schrieb:

    Naja, ich war irgendwie davon ausgegangen, dass sich niemand die Mühe machen würde, hier künstlich Linker-Fehler zu produzieren. Hatte gehofft, dass eher Linker-Fehler aus der praktischen Produktion hier auftauchen, und viel davon mit Boost zu tun hat 😉

    Ich hatte durchaus ein paar Fehlermeldungen die da passen würden.
    Wobei es nicht immer nur Linkerfehlermeldungen sind, ganz lustig sind oft auch welche wo er keinen passenden Overload findet, und dann die Liste der gefundenen Funktionen mit dem Namen ausspuckt die alle nicht passen. Das kann dann auch gleich mal über ein paar Bildschirmseiten gehen.
    Nur dass ich mir diese Meldungen nicht aufhebe, ich fixe den Code dann halt und das wars dann.



  • Wenn nicht gerade Wochenende ist, halte ich es eigentlich genauso 🙂



  • Ich hatte gerade 65 Errors weil ich eine geschweifte Klammer zu viel hatte...
    Bis man da erst mal drauf kommt. 😡
    Dämlicher Tippfehler. 🙄



  • Nathan schrieb:

    Ich hatte gerade 65 Errors weil ich eine geschweifte Klammer zu viel hatte...
    Bis man da erst mal drauf kommt. 😡

    Das kommt mit der Erfahrung.
    Irgendwann bekommt man nen Riecher dafür was der Fehler sein könnte.



  • Will mal gerade reinschauen, was sehe ich da!? volkard ist zurück?



  • hustbaer schrieb:

    Das kommt mit der Erfahrung.
    Irgendwann bekommt man nen Riecher dafür was der Fehler sein könnte.

    Beispiel: Ist nicht mir passiert, sondern sah es bei zwei Studienkollegen (Damals gab es nicht genug Rechner und man mußte immer zu zweit einen Rechner benutzen, hoffe, es ist inzwischen besser.). Der andere war Nube. Der eine war verdammt flink. Wie ich konnte er schon vor Studienbeginn programmieren. Bei Standardaufgaben war er tatsächlich doppelt so schnell wie ich. Da suche ich noch die Tasten, die ich drücken muss, und sein Programm läuft schon korrekt.

    Ganz fieses Fach für manche, Praktikum zu numerischer Mathematik.

    //numerische integration zwischen x=3 und x=5 durchführen, 3 und 5 sind 
       //fest über alle messungen. es soll geschaut werden, wie die anzahl der 
       //stützstellen das ergebnis beeinflusst. 
    int left=3;
    int right=5;
    //100 stützstellen laut aufgabenstellung, wird dann 
       //auch 200, 500, 1000 sein. 
    int n=100;
    
    double s=0;
    for(double x=left;x<right;x+=(right-left)/n){
       s+=func(x);
    

    Die Ärmsten haben daran mehr als 24 Stunden daran gesucht. Die sind dabei um Jahre gealtert.

    Ich schaute es mir an, und es war mir direkt klar. Das hatten sie sich in was hereingeritten, köstlich.

    Rätsel an Anfänger: Warum klappt das so so gar nicht?

    Natürlich hab ich's nur so schnell gefunden, weil ich selber genau diesen Fehler vorher schon oft genug gemacht hatte. Geschwindigkeit im Fehlerfinden ist einfach nur Erfahrung, die Sammlung der Fehler, die man selber gemacht und gelöst hat.

    Seit ca 15 Jahren dominiert bei mir eine Fehlerklasse alle anderen total: Um gewisse Einflüsse zu redizieren, ersetze ich eine Funktion durch einen Dummy. Dann vergesse ich die Ersetzung und arbeite an der Funktion weiter. Ist alles ganz interkativ noch. Tippfehler werden vom Compiler bestraft. Ich baue die Funktion um wie wild. Bis zu einer soooo offensichtlichen Funktion, daß sie ganz ganz gewiß fehlerfrei ist. Und doch klappt es nicht. Haha, löl. Die Funktion, an der ich gerade rumbastele, wird ja gar nicht aufgerufen.



  • @hustbaer:
    Ja, kann ich mir vorstellen.
    Ich habe den dann durch systematisches Auskommentieren gefunden.
    Eigentlich stand der auch genauso in der Fehlerliste aber ziemlich in der Mitte...
    Und bei so vielen Fehlern habe ich mir nicht alles durchgelesen. 😃



  • Ja, die int/int-Geschichten habe ich auch durchgemacht 😃



  • volkard schrieb:

    Rätsel an Anfänger: Warum klappt das so so gar nicht?

    Also ich als Anfänger würde nach einem kurzen Blick darauf behaupten, dass es eine Endlos-Schleife wäre wegen double x=left, also, dass x immer 3 bleibt. 😶
    (Hoffe liege richtig und du meinst nicht die fehlende geschweifte Klammer am Ende 😃 )



  • xStrykex schrieb:

    volkard schrieb:

    Rätsel an Anfänger: Warum klappt das so so gar nicht?

    Also ich als Anfänger würde nach einem kurzen Blick darauf behaupten, dass es eine Endlos-Schleife wäre wegen double x=left, also, dass x immer 3 bleibt. 😶

    Jain, eine Endlosschleife entsteht, aber dein warum ist falsch. Die Antwort hat Decimad schon gepostet 😉



  • Decimad schrieb:

    Jetzt kommt es auf die Länge an!

    Seit wann kommt es eigentlich auf die Länge an? 😃
    Ich denke es kommt auf Schnelligkeit und Geschmack Eleganz an...


Anmelden zum Antworten