Ringinclude



  • Hallo,

    ich hab ein Verständnisproblem.

    Ich hab eine Klasse A. In dieser wird eine Klasse B erstellt.

    Im Konstruktor von B möchte ich gern A mit "this" übergeben.

    Jetzt hab ich das Problem, dass ich b.h in A includieren mus und a.h in b.h was der Compiler natürlich nicht mit macht.

    Soweit ich es ergoogeln konnte kann ich in B die Klasse A "vorwärtsdeklarieren" und dann die header nur in der b.cpp einbinden.

    Iwi verkompliziert sich das für mich alles. Wenn ich jetzt noch ne Klasse C dazu bekomme, dann müsste ich ja in der Klasse C die KLasse A nochmal "vorwärtsdeklarieren" ?

    Vielen Dank für eure Hilfe



  • -> forward declaration



  • ja das mir klar, das es das gibt und das funktioniert, hab ich ja geschrieben.

    gibts da keine coolere möglichkeit?



  • beginner2013 schrieb:

    gibts da keine coolere möglichkeit?

    Ein besseres Klassendesign, das vorher entsprechend gut durchdacht wurde.



  • beginner2013 schrieb:

    Iwi verkompliziert sich das für mich alles. Wenn ich jetzt noch ne Klasse C dazu bekomme, dann müsste ich ja in der Klasse C die KLasse A nochmal "vorwärtsdeklarieren" ?

    Ok. Damit könnte ich leben.

    Die Gegenschritte wären grausamer, fürchte ich.

    - B und C von einer gemeinsamen Basisklasse ableiten und nur die von A inkludieren.

    - A zu einem Template machen und wer sich sein A anlegt, hat eh aus anderen Gründen schon B und C.

    - Alles von Object ableiten und Object-Zeiger benutzen.

    - Oder void-Zeiger.

    - Zur Typwegmachung solche Nutzdaten in eine Datenbank stopfen.



  • fdgdfgdfg schrieb:

    beginner2013 schrieb:

    gibts da keine coolere möglichkeit?

    Ein besseres Klassendesign, das vorher entsprechend gut durchdacht wurde.

    z.b. beim Visitor-pattern brauche ich ja die forward declarations (zumindest habe ich damals (vor ca.3-4wochen) keine andere möglichkeit gefunden, diese ca. 150 nichtssagenden errors wegzubringen xD). das heißt es gibt einen besseren visitor-pattern (dieses pattern kommt mir sowieso suspekt vor 🙂 fragt mich bitte nicht warum)?


Anmelden zum Antworten