[Spiel] Findet die Fehler ...



  • Hi,

    habe mir mal gedacht jeder postet irgendwelche Codes, wo Fehler enthalten sind. Vllt haben wir am Ende ein paar schöne Seiten, woraus man vllt einen Artikel etc. machen könnte.

    Fangen wir erstmal zum warmlaufen mit ganz einfach Beispielen an die nicht kompilierbar sind, später dann kompilierbare Fehler.

    Bitte aber nicht durch den Compiler jagen, sondern so drauf kommen.

    class MyClass {
    
      public:
             MyClass(int i) { }
             MyClass(const MyClass& obj) { }
    };
    
    int main()
    {
       MyClass a = 5;
    
       vector<MyClass>::iterator it;
       vector<MyClass> vec(4);
    
    }
    

    Die schweren Geschütze kommen dann später ...

    Edit: Runterscrollen und schauen ist verboten, das verdirbt nur den Spaß. Das Posten der Lösungen ist jeweils 5h nach dem Codepost erlaubt 😉



  • KasF schrieb:

    MyClass a = 5;
    

    Was ist n das?



  • implizite initialisierung. das geht, weil der ctor MyClass(int i) nicht als explicit deklariert wurde.



  • c++ syntax ist doch krank.



  • Also mit Compiler kommt man drauf, ohne muss man um echt viele ecken denken. aber nettes beispiel 🙂



  • Hmmm, wann soll man eigentlich die Lösung posten, wenn keiner aus fairness gegenüber den anderen die Lösung sagen will 🙂 ?

    @otze: Das haste aber schnell weg editiert 😃



  • also da fehlt ja schon das std:: vor dem vector ...



  • der fehler ist eigentlich sehr gewieft. der liegt an der definition des std::vector konstruktors, der hier verwendet wird. falls jemand mal nachgucken will 😃



  • Ich denk das kann ich ohne nachzusehen sagen.

    Soll ichs denn posten?



  • darthdespotism schrieb:

    Soll ichs denn posten?

    Siehe mein Edit 😉



  • Nächster Code, wiedereinmal erst ein nicht kompilierbares Beispiel:

    class MyClass {
    
        private:
                int a, b, c;
    
        public:
                MyClass() : a(5),b(3425),c(0)
                { }
    
                bool setC(char a)
                {
                    return c=a;
                }
    
                friend ostream& operator<<(ostream& stream,MyClass& obj);
    };
    
    ostream& operator<<(ostream& stream,MyClass& obj)
    {
        obj.setC('a');
        stream << obj.a << obj.b << obj.c << endl;
    
        return stream;
    }
    
    int main()
    {
       MyClass a, b(a), c = MyClass();
       cout << a << b << c << MyClass();
    
    }
    

    Edit: Kein Gewähr auf Folgefehler, die aus der Behebung des Hauptfehlers entstehen könnten 😉



  • Zum ersten:

    Der Konstruktor von std::vector ruft für 4 Elemente den Argumentlosen Constructor auf, der aber nicht deklariert ist oder so ähnlich

    @ KasF: Ist es erlaubt den Compiler zu verwenden um seine Vermutung zu bestätigen?



  • darthdespotism schrieb:

    Der Konstruktor von std::vector ruft für 4 Elemente den Argumentlosen Constructor auf, der aber nicht deklariert ist oder so ähnlich

    Naja, das "oder so ähnlich" gefällt mir nicht 😉
    Glaube dir ehe nicht mehr das du nicht geschummelt hast 😃

    darthdespotism schrieb:

    @ KasF: Ist es erlaubt den Compiler zu verwenden um seine Vermutung zu bestätigen?

    Von mir aus, wenn du dir denkst die Lösung zu kennen, spricht nichts dagegen.

    Zum ersten Code nochmal:
    Ein/Der C'tor von vector sieht so aus:

    vector( size_type num, const TYPE& val = TYPE() );
    

    Da ich schon aber selbst Konstruktoren mit Argumenten definiert habe, wird kein Standardkonstruktor definiert, der aufgerufen werden könnte, um die Elemente zu initialsieren.

    Der Rest ist nur Ablenkung 😃



  • KasF schrieb:

    Der Rest ist nur Ablenkung 😃

    genau wie im zweiten beispiel. ich hab mir fast nen wolf gesucht, bis mir der fehler aufgefallen ist :p



  • 😃



  • KasF schrieb:

    Glaube dir ehe nicht mehr das du nicht geschummelt hast 😃

    Soll ich jetzt beleidigt sein 😮

    Seit wann den n nicht mehr 😃



  • hab die lösung von code 2 😉 ein blick 😃

    hätts aber sicher auch nicht gefunden, wenn ich vor kurzem nicht das selbe problem gehabt hätte 😉



  • ich _denke_ sie zu kennen, kam mir etwas dubios vor, habe allerdings noch nicht versucht sie zu überprüfen und bin mir an der Stelle auch nicht sicher

    Der Code sollte nebenbei bemerkt auch jede Menge Warnings produzieren oder?



  • darthdespotism schrieb:

    Der Code sollte nebenbei bemerkt auch jede Menge Warnings produzieren oder?

    eigentlich sollte der keine einzige produzieren.



  • darthdespotism schrieb:

    Der Code sollte nebenbei bemerkt auch jede Menge Warnings produzieren oder?

    Nee, ohne die Fehlerstelle ist bei allen möglichen eingeschaltet Warnings bei mir kein warning ....


Anmelden zum Antworten