Inheritance casts



  • Erstens: bubbleSort erwartet einen Zeiger auf eine Feld. Du übergibts aber nur ein Feld. Das ist schonmal schlecht. Wieso willst du überhaupt einen Zeiger auf ein Feld?

    Zweitens: Du sagst, das Compareable ein Java-artiges Interface sein soll (von C++-Programmierern meistens einfach als Protokoll bezeichnet). Warum ist die MEthode compare dann nicht abstrakt?

    Drittens: Dine Leute scheinen extrem alt zu sein. Wer wurde denn bitte im Jahre 19 geboren? Verwechselst du Geburtstag und alter (age)?

    Ich nehme an du solltest echte Daten verwenden (z.B. "02.10.1983").



  • Hallo Helium,

    das Protokoll ist mit dem Zeiger leider so gegeben. Ich habe den Code jetzt mal so abgeändert.

    person* persons[5];
    bubbleSort(persons, 5);
    

    Ich hoffe, dass das prinzipiell ist was du meinst.
    Dabei tritt jetzt allerdings folgender Fehler auf:

    \Documents and Settings\Seb\My Documents\C++ 2.7-2.8\main28.cpp(19) : error C2664: 'bubbleSort' : cannot convert parameter 1 from 'person *[5]' to 'Comparable *[]'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

    Kann mir einer sagen, warum ich den Fehler bekomme? person inherited doch von Comparable.

    Vielen Dank



  • A** und B** sind nicht verwandt, auch wenn B von A erbt.



  • Und wie kann ich das Problem dann lösen?



  • Du könntest die Funktion einfach überladen. Danach hast du wahrscheinlich den gleichen Code doppelt, was auch nicht besonders schön ist.



  • void bubbleSort(Comparable *array[], int size);
    

    ist gegeben?

    Aha. Na das ist doof. Versteh ich auch nicht.

    So würde reichen:

    void bubbleSort(Comparable array[], int size);
    

    Dann hättest du die ganzen Probleme nicht.



  • Dann müssten die Objekte aber sizeof(Comparable) auseinander liegen, weil es eben ein Array wäre. Da Comparable ein Interface ist, ist die doppelte Verzeigerung schon logisch notwendig.



  • Vergiss einfach, was ich gesagt habe.



  • wenn er Comparable** will, dann gib ihm doch einfach das, ungefähr so:

    Comparable **pp = person;

    funktion (pp, ...);



  • Fehlt da nicht ein &



  • SirLant schrieb:

    wenn er Comparable** will, dann gib ihm doch einfach das, ungefähr so:

    Comparable **pp = person;

    funktion (pp, ...);

    Nochmal: Comparable** und Person** sind nicht verwandt, soweit klar? Gut, denn wenn es der Fall wäre, wäre sowas möglich:

    struct A { };
    struct B1 : A { };
    struct B2 : A { };
    
    B1* pb1;
    B2* pb2;
    
    A** pa = &pb1;
    *pa = pb2; //plötzlich zeigt der pb1-Zeiger auf ein B2 Objekt
    

    und jetzt du mal...



  • Compareable *persons[5] = { 
                new person("1", "19"), 
                new person("2", "23"), 
                new person("3", "22"), 
                new person("4", "18"), 
                new person("5", "20"), 
        }; 
    
        bubbleSort(persons, 5);
    
        for (int i=0; i<5; ++i)
           delete persons[i];
    


  • Beim zweiten Anlauf ist dir doch was eingefallen... 🙄


Anmelden zum Antworten