Was hab ich hier verbrochen?



  • Ein anderer Fehler ist:

    #define __IMAGE__

    Solche Namen sind reserviert. Benutze einfach keine doppelten Unterstriche und keine Namen, die mit Unterstrichen anfangen. Dies ist leider bei sehr vielen Büchern und Tutorials falsch.



  • Hatte micht zwar auch schon mal gewundert, denn irgendwo stand da etwas von reservierten Namen. (Sind wohl ehr nicht öffentliche Funktionen und Deklarationen)

    Habs dann gleich mal korrigiert.



  • class ImageReader {
            public:
                virtual Image* readImage(FILE *file) = 0; // <-- jetzt ist readImage pure virtual
        }; /* class ImageReader */
    

    ...und überleg dir, ob du in nem C++-Programm wirklich mit C-filehandling arbeiten willst, oder doch lieber std::fstream benutzt.



  • Image* BMPReader::readImage(FILE *file)
    {
        return NULL;
    }
    

    Daran lag zumindest die Fehlermeldung. Denn alles andere hatte leider trotz der guten Hilfe nichts gebracht. Bin jetzt voll Happy 😃

    ...und überleg dir, ob du in nem C++-Programm wirklich mit C-filehandling arbeiten willst, oder doch lieber std::fstream benutzt.

    Darüber werde ich auch gleich noch mal was lesen, denn irgendwie hast du da recht, zumal ich Stream (ala Java) sowieso schön finde 😉



  • mach die funktion lieber pure virtual, denn dann wird direkt ne fehlermeldung geworfen, wenn eine Klasse diese methode nicht überschreibt.



  • Ein implementierter virtual Destruktor für die Klassen von denen abgeleitet wird ist oft auch nicht schlecht.



  • Tobain schrieb:

    otze schrieb:

    ImageReader::readImage muss pure virtual sein, bei dir ist er aber nur virtual.

    Worin besteht dabei der Unterschied zwischen pure virtual und nur virtual?

    Ich komme von der Javafront rübergeschwappt und habe in den verschiedensten Tutorials noch nicht alzu sehr viel darüber gefunden...

    pure virtual ist so wie abstract in Java.



  • ppc schrieb:

    Tobain schrieb:

    otze schrieb:

    ImageReader::readImage muss pure virtual sein, bei dir ist er aber nur virtual.

    Worin besteht dabei der Unterschied zwischen pure virtual und nur virtual?

    Ich komme von der Javafront rübergeschwappt und habe in den verschiedensten Tutorials noch nicht alzu sehr viel darüber gefunden...

    pure virtual ist so wie abstract in Java.

    Mit dem Unterschied, dass pure virtuals eine Definition besitzen können.



  • Mit dem Unterschied, dass pure virtuals eine Definition besitzen können.

    Hmm, das versteh ich nicht. Ich dachte das pure betont gerade, dass keine Definition angegeben ist (also "=0") im Gegensatz zu virtual....

    Erklär mal bitte 😉

    Mfg, smasher1985



  • Nein, pure heißt, dass eine Definition nicht benötigt wird und dass die Klasse abstrakt ist, d.h. nicht instantiiert werden kann. Es ist allerdings normalerweise unüblich, rein virtuelle Memberfunktionen zu definieren, von einer wichtigen Ausnahme abgesehen: Virtuelle Destruktoren müssen immer definiert werden, auch wenn sie rein virtuell sind.

    edit: sinnentstellenden Typo korrigiert



  • Kapier ich nicht. Ich dachte immer:

    virtual foo() {
       ///...
    }
    

    ist eine virtuelle Funktion und muss eine Definition besitzen und

    virtual foo() = 0;
    

    ist pure virtual. Und wo soll da noch eine Definition hin??

    Scheinbar sitz ich da einem Missverständnis auf..

    Mit der Bitte um Aufklärung 😉
    smasher1985





  • die definition ist ihr name, ihre parameter und der rückgabetyp
    die sind fest
    es gibt aber keine implementation zu dieser methode



  • pure virtual kann doch eine implementation haben? ist das nicht irgendwie...sinnlos(ausser im falle des dtors...)?




Anmelden zum Antworten