Auf einen Vektor einer anderen Klasse zugreifen



  • In einem solchen Programm ist es natürlich egal ob man Zeiger nimmt oder es lässt. War einfach eine intuitive Entscheidung. Habe es jetzt auch noch mal komplett umgestellt und arbeite ohne Zeiger aber trotzdem kommt der Fehler "Segmentation fault" wenn ich wie beschrieben auf die Methode zugreifen und etwas aus dem Vektor lesen möchte. Wie könnte ich denn sonst von der Klasse Ticketverwaltung aus auf den Vektor von Programmverwaltung zugreifen?

    //Aufruf zum Test in der main
    Programmverwaltung verwaltung;
    Ticketverwaltung ticket;
    
    ticket.ticketKaufen(); //Fehlermeldung
    verwaltung.zeigeFilmSaal(); // Gibt mir die Daten aus
    


  • SliceOfLife schrieb:

    In einem solchen Programm ist es natürlich egal ob man Zeiger nimmt oder es lässt.

    Abgesehen davon, dass mit Code dein Code deutlich langsamer, fehleranfälliger, nicht exception safe, komplexer, schlechter wartbarer und allgemein schlechter wird, ist es egal, ja.

    //Aufruf zum Test in der main
    Programmverwaltung verwaltung;
    Ticketverwaltung ticket;
    
    ticket.ticketKaufen(); //Fehlermeldung
    verwaltung.zeigeFilmSaal(); // Gibt mir die Daten aus
    

    Woher soll dein ticket-Objekt von deinem verwaltungs-Objekt wissen?



  • Wie mache ich dann dies bekannt? Dachte ein include in der Ticketverwaltungsklasse reicht aus.

    #include "Programmverwaltung.h"
    


  • Nein, das alleine reicht sicherlich nicht.
    Du mußt eine Beziehung zwischen den beiden Objekten herstellen, z.B. als Konstruktorparameter oder Methodenparameter übergeben.



  • Th69 schrieb:

    Nein, das alleine reicht sicherlich nicht.
    Du mußt eine Beziehung zwischen den beiden Objekten herstellen, z.B. als Konstruktorparameter oder Methodenparameter übergeben.

    Und in diesem Fall bräuchtest du ggf. auch einen Pointer. Aber kein new.



  • SliceOfLife schrieb:

    Wie könnte ich denn sonst von der Klasse Ticketverwaltung aus auf den Vektor von Programmverwaltung zugreifen?

    Gar nicht. Du rufst ja auch eine Memberfunktion auf, die dies dann macht.

    Allerdings scheint dir der Unterschied zwischen Klasse und Objekt/Instanz nicht klar zu sein. In deinem Beispiel benutzt ticket.ticketKaufen() eine andere Paketverwaltung, als die Namens "verwaltung" in der main-Funktion.

    Was du in deiner Funktion ticketKaufen falsch machst kann dir keiner sagen. Der hier gezeigte Code ist nicht der, der bei dir abstürzt, da er nicht übersetzbar ist!



  • SliceOfLife schrieb:

    Kinoprogramm(string v_kw, string v_tag, string v_uhrzeit, string v_titel, string v_kategorie, string v_laenge, int v_kino);
    

    Was sollen diese ganzen v_ Präfixe? Bei Parametern braucht man echt keine Präfixe.

    Wo passiert der Segmentation Fault? In ticketKaufen? Der Code wie du ihn zuletzt gepostet hast, kann nicht funktionieren.

    Programmverwaltung pv;

    Und dann

    pv->zeigeFilmSaal();

    Das passt nicht zusammen. Entweder ist es ein Zeiger, oder kein Zeiger. Und wenns einer ist, hast du ihn vielleicht nicht richtig initialisiert.



  • Als der Vektor noch mit Zeiger war habe ich mit "->" darauf zugegriffen und nun ohne Zeiger mit ".".

    Ich verstehe einfach nicht wo das Problem ist 😞 . Hier mal meine Gedankengänge:
    In der Methode ticketKaufen() die in der Klasse Ticketverwaltung ist, erstelle ich ein Objekt vom Typ Programmverwaltung (Programmverwaltung pv). Mit diesem Objekt möchte ich nun die Methode zeigeFilmSaal() aus der Klasse Programmverwaltung aufrufen (pv.zeigeFilmSaal()). Das Objekt hat doch zugriff auf den Vektor und kann mir doch theoretisch den gewünschten Wert zurückgeben oder nicht?

    void Ticketverwaltung::ticketKaufen() 
    { 
       Programmverwaltung pv; 
       cout << "Für welchen Film möchten Sie eine Karte kaufen?" << endl; 
       pv.zeigeFilmSaal(); 
    } 
    
    void Programmverwaltung::zeigeFilmSaal() { 
     for (int i = 0; i < kp.size(); i++) { 
    cout << "Titel: " << kp[i]->GetTitel() << ", Saal: " << kp[i]->GetKino() << endl; 
    } 
    }
    

    Der Fehler kommt sobald ich versuche über pv.zeigeFilmSaal() auf den Vektor zuzugreifen.



  • SliceOfLife schrieb:

    Als der Vektor noch mit Zeiger war habe ich mit "->" darauf zugegriffen und nun ohne Zeiger mit ".".

    Und was ist sonst im echten Code noch anders?

    SliceOfLife schrieb:

    Das Objekt hat doch zugriff auf den Vektor

    Auf seinen Vector.



  • SliceOfLife schrieb:

    Ich verstehe einfach nicht wo das Problem ist 😞 .

    Für sowas gibt es Debugger. Der fängt die Exception und dann siehst du im Callstack, was passiert ist.


Anmelden zum Antworten