Problem mit Klassen die sich gegenseitig benutzen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem mit Klassen die sich gegenseitig benutzen

    Hallo allerseits,
    ich habe ein kleines Problem.
    Ich habe eine Klasse Node und eine Klasse Edge. Im Endeffekt möchte ich eine Graphenrepräsentation erzeugn. Das Problem liegt nun darin, dass die Klasse Node einen Mehode hat, die die inzidenten Kanten zurückgeben soll. Und die Klasse Edge besitzt Methoden die die durch die Kante verbundenen Nodes zurückliefert. Somit referenzieren sie sich gegenseitig und das geht schief. Ich habe zwei getrennte Header Dateien in die ich jeweils die andere includiere. ifndef, define und endif sind in beiden Fällen vorhanden.

    Hat jemand eine Idee wie ich das Problem umgehen kann?

    Vielen Dank, Matze
  • In einen von den beiden Headern musst du ne Vorwärtsdeklaration der anderen Klasse machen.
    Dann darfst du im Header nur nen Pointer auf diese Klasse deklarieren.
    Den Header der Klasse bindest du dann in der cpp Datei der Klasse ein.

    Quellcode

    1. //A.h
    2. #ifndef __A_H
    3. #define __A_H
    4. #include "b.h"
    5. class A
    6. {
    7. B b;
    8. };
    9. #endif
    10. //B.h
    11. #ifndef __B_H
    12. #define __B_H
    13. class A;
    14. class B
    15. {
    16. A* a;
    17. };
    18. #endif
    19. //B.cpp
    20. #include "A.h"
    21. B::B()
    22. {
    23. a = new A;
    24. }
    25. ........
    Alles anzeigen


    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • Das kommt auf den Einzelfall an.
    Insbesondere halt wie die beiden Klassen miteinander interagieren sollen/müssen.
    In Zeiten von Design Patterns deren vorrangiges Ziel die Entkopplung von Klassenabhängigkeiten ist,sollte man sich schon fragen ob sich zirkuläre Abhängigkeiten sonderlich gut im Design machen.
    Darüber kann ich mir aber von hier aus kein Urteil bilden :wink: .

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)