Referenzen als Member initialisieren



  • Hallo!

    Meine Klasse soll ein Attribut vom Typ QFont (QT) haben.
    Wenn ich

    QFont f;
    

    schreibe, beklagt sich der Compiler über einen
    unvollständigen Typ. Offenbar enthält der QFont ein Attribut, dessen
    Größe nicht klar ist. Also muß eine Referenz her:

    QFont &f;
    

    Wie initialisiere ich diese nun richtig?

    font("Helvetica", 12)
    

    schlägt fehl - "error: member initializer expression list treated as compound expression"

    font(*(new QFont("Helvetica", 12)))
    

    Das geht, aber ich weiß nicht warum. 😃
    Ich drücke der Referenz den Zeiger auf's Auge, bin mir aber nicht sicher, ob das mit dem Aufräumen (delete) klappt.
    Ist das OK oder geht das schöner?

    Danke,
    Stimpy



  • Das ist überhaupt nicht ok. Spätestens wenn Du das delete zu dem new implementieren willst (willst Du doch, oder?), weisst Du warum.
    Das ginge zwar im Zweifel noch über &f, aber das lassen wir lieber.

    Entweder Du includierst qfont.h im Header der Klasse, so dass der Typ QFont vollständig wird, oder Du nimmst einen (smart?) Pointer. Aber eine Referenz derart zu missbrauchen und noch dazu mit Speicherlecks um sich zu werfen - lass mal lieber 😉



  • Oh, das hatte ich ganz übersehen. Ich hatte qfont.h nur vergessen einzubinden!
    Daher war ich der Meinung daß die Größe des QFonts für den Compiler nicht festzustellen ist. Das hätte er mir auch sagen können, daß er den Header vermißt...

    Danke!


Anmelden zum Antworten