Dateinübergreifender Zugriff auf Objekt



  • Ich bin wirklich am verzweifeln.
    Ich hab zwei .cpp Dateien mit je einer Klasse. Die Klassen müssen untereinander jeweils auf die Methoden zugreifen können. Also z.B. eine Methode der Klasse A auf eine der Klasse B.
    Kann mir jemand verraten wie und wo ich die Objekte erstellen muss damit ich überall in jeder .cpp Datei auf die jeweiligen Klassen/Methoden zugreifen kann? Mein Programm muss bis Dienstag laufen, und ich komm einfach nicht weiter wenn das nicht geht. 😞

    P.S.
    Ich weiß...die Frage hab ich schonmal gestellt. Aber der Thread is dirkt ganz runter gerutscht, und ich hoffe das ein unbeantworteter Thread eher gelesen wird.



  • Hallo

    wenn du s dir einfachen machen willst, fass die beiden Klassen in einer Datei zusammen, dann reicht eine einfache Forward Declaration.

    Wenn das nicht gewollt ist, must du darauf achten, das du nicht Header A in Header B includest und andersrum. Denn das ist Circular Linking und funktioniert nicht. Besser ist sowas wie Header A in Header B includen und Header B in Implementation A includen.
    Außerdem kannst du mit einer gemeinsamen Datei/Klasse C arbeiten, die alle gemeinsamen Methoden für A unb B bereitstellt.

    bis bald
    akari



  • Hallo,

    Das ist die eine Sache, aber so wie ich ihn verstanden habe will er Instanzen beider Klassen als globale Variablen im gesamten Programm bereitstellen. Dazu müßte er diese Instanzen natürlich einmal mit extern deklarieren.
    Wobei man globale Variablen aber vermeiden sollte. Das kann man mit Sicherheit auch anders lösen.
    Bezüglich des Zugriffs am besten (wie akari schon sagte) die Deklarationen in eine Datei und dann eine Forwarddeklaration.
    Vielleicht so

    class B;
    
    class A
    {
    	public:
    	  A() {}
    	  void callBFunct(B& b)
    	  {
    	  	b.funct();
    	  }
    	  void funct() {}
    };
    
    class B
    {
      public:
        B() {}
        void callAFunct(A& a)
        {
          a.funct();
        }
        void funct() {}
    };
    


  • 1000 mal Danke.
    Ich benutz jetz zwar immer noch globale Instanzen, aber mit extern hab ich's zumindest geschaft die überall bekannt zu machen.



  • Das hatt Joe dir im vorigen Thread aber auch schon gesagt. Desweiteren hat auch er darauf hingewiesen, dass man globale Variablen vermeiden sollte.



  • Allerdings wusst ich nicht viel mit dem wort extern anzufangen....ich wusste nicht mal das es zur deklaration benutzt wird...
    Das man globale Variablen vermeiden soll ist mir sehr wohl bewusst. Nur hab ich z.Z. keine andere Möglichkeit, da mein wissen in OOP noch nicht sehr weitreichend ist!



  • @akari
    Habe mal in der FAQ nachgesehen, dort gibt es ein schönes Beispiel zu diesem Thema, allerdings wird da Header A in Header B includiert und anders rum, also genau so wie du gesagt hast, dass man es nicht machen soll und dass es nicht funktioniert. Hab das mal ausprobiert und es funzt wunderbar.

    /Edit: Ups, lesen sollte man können, habe nichts gesagt. da werden die Header ja beide male in der Implementation includiert. Tschuldigung



  • Welche FAQ is das denn? Hatte keine passende gefunden. Wäre ja für zukünfige Projekte interesant zu wissen wie es "richtig" gemacht wird.




Anmelden zum Antworten