Zugriff auf ein Objekt aus einer methode heraus



  • Hallo,
    da ich mich immer wieder mit Fragen im Bereich von C++ in Foren gequälte habe in denen nur jeder 10. ein bisschen Ahnung davon hat, habe ich beschlossen mal hier vorbei zu schauen.
    Zu meiner Frage:
    (ich wusste nciht wie ich den Titel deutlicher formulieren sollte)
    Ich habe 2 Klassen, ich nenne sie der einfacht halt halber mal a und b. Ich will nun aus einer Methode der Klasse a auf ein Objekt der Klasse b zu greifen. Nun erhalte ich aber eine Fehler Meldung undefiniertes symbol:

    b *peter;
    peter= new b();
    
    a::wassauchimmer()
    {
    peter->....
    //oder
    (Fehlt hier was? Wenn was?->)peter->.....
    
    }
    

    Hier nochmal mein tatsächlicher Code

    TSensor::ausloesen(int Fzgnr)
    {
    if(sonder<=0)
    {
    //....
    
    }
    else
    {
    //...
    strecken[streckea]->belegt=0; //hier ist der Fehler; strecken ist ein objekt einer anderen klasse
    }
    
    }
    

    Schon mal vielen Dank für eure Hilfe und viele Grüße
    Moritz



  • Hallo

    Syntaktisch ist das schon alles richtig. Und das Problem ist auch allgemeiner als OOP. Du must nämlich noch auf die Gültigkeit von Variablen achten. Es reicht nicht irgendwo ein Zeiger peter anzulegen und dann von irgendwo anders auf diesen zugreifen zu wollen. peter muß bekannt sein, sei es über include (bei einer globalen Variable aus einer anderen Headerdatei), Verlegung von lokal nach Member der gleichen Klasse oder Übergabe als Parameter der Funktion.
    Welches von den drei Varianten du brauchst ist allerdings aus deinem Auszug nicht richtig erkennbar. Insbesondere ist entscheidend wo peter deklariert wird.

    bis bald
    akari



  • Schon mal vielen Dank,
    bedeutet das also, dass ich Peter in einer Header datei deklariere und diese Datei überall einbinde wo ich sie brauche?

    header datei

    b *peter;
    
    a::irgendwas()
    {
    include(haeder datei);
    ....
    }
    

    Stimmt das soweit?



  • Hallo

    #include "header datei.h"
    
    a::irgendwas()
    {
      p->...;
    }
    

    Aber wie schon so oft gesagt sond globale Variablen schlecht. Ich wette du kannst das auch umformen, das p zur Klasse a gehört oder eben als Parameter an irgendwas übergeben wird.

    bis bald
    akari



  • Vielen Dank, funzt perfekt 🙂


Log in to reply