Aus einer Klasse auf einer anderen zugreifen



  • Hallo,

    Bin neu im Forum!

    Ich verwende Microsoft Visual Studio 2010 für mein C++ Programm.
    Jetzt habe ich angefangen mit Klassen zu arbeiten und schon hab ich das erste Problem. Ich hab nur eine .cpp Datei darin 2 Klassen mit Funktionen definiert.

    Man muss vor dem Zugriff auf die Klasse ja ein Objekt erstellen, dies klappt aber nur in int main(), nicht aber innerhalb einer Funktion anderer Klasse.

    Beispiel wie ichs versucht hab:

    class Rechner {
    public:
    void rechnen() {
    Fehlerclass Fehlermeldung; //Compiler Fehler: "Fehlermeldung" nicht deklarierter Bezeichner
    if (ok==true) {
    Ergebnis=40;
    }
    else {
    Fehlermeldung.fehler();
    }
    }
    }

    class Fehlerclass() {
    public:
    void fehler() {
    cout << "Unbekannter Fehler aufgetreten" << endl;
    tunochwas;
    undnochwas;
    }
    }

    int main() {
    Fehlerclass Fehlermeldung; //Hier klappts
    Fehlermeldung.fehler();



  • Hi,
    der Compiler schaut sich deinen Quellcode von oben nach unten an. Wenn er etwas nicht kennt, gibt er einen Fehler aus. Nun sieht er Fehlerclass , welche ihm bis jetzt noch nicht unter die Augen gekommen ist, ergo Fehler. Was bedeutet das für dich? Weißt du was du machen musst? 🙂



  • Ok ich weiß 😃

    Hab jetzt die beiden Klassen vertauscht und es geht! Danke! Hätte nicht gedacht, dass es so einfach wär. Aber das mit dem sortieren ist ja blöd weil mein Problem dadurch noch nicht ganz gelöst ist 😞 . Was ist wenn (und das brauch ich auch) auch die erste(neu sortierte) Klasse auf die zweite(neu sortierte) zugreifen will. Also:

    class Fehlerclass() {
    public:
    void fehler() {
    cout << "Unbekannter Fehler aufgetreten" << endl;
    tunochwas;
    undnochwas;
    Rechner Rechenobjekt; //Das würde jetzt nicht mehr funktionieren
    Rechenobjekt.ok=false;
    }
    class Rechner {
    public:
    bool ok;
    int Ergebnis;
    void rechnen() {
    Fehlerclass Fehlermeldung; //geht jetzt!!
    if (ok==true) {
    Ergebnis=40;
    }
    else {
    Fehlermeldung.fehler();
    }
    }
    }



  • Lagere die Implementierung der Funktionen aus.



  • Jaa das geht hier. War aber auch nur ein Beispiel. Wenn "ok" aber keine Variable sondern eine Funktion ist, die aufgerufen werden soll, soll ich sie dann auch noch auslagern? Dann brauch ich ja aber auch keine Klassen. D.h. aber dass Klassen grundsätzlich kein gegenseitiger Zugriff zusteht.

    Ich dachte, dass es eine bessere Lösung gibt.

    Naja vielen Dank euch allen.



  • 99luftis schrieb:

    Jaa das geht hier. War aber auch nur ein Beispiel. Wenn "ok" aber keine Variable sondern eine Funktion ist, die aufgerufen werden soll, soll ich sie dann auch noch auslagern? Dann brauch ich ja aber auch keine Klassen. D.h. aber dass Klassen grundsätzlich kein gegenseitiger Zugriff zusteht.

    Ich dachte, dass es eine bessere Lösung gibt.

    Naja vielen Dank euch allen.

    Nein, du sollst die Implementierung der Funktionen der Klasse auslagern und in eine Source-Datei schreiben, da kennen sich die Klassen schon.



  • außerdem sind deine Funktionen dann auch nicht inline



  • Das wird bei trivialen Funktionen vom Compiler eh gemacht, egal wo die stehen.


Anmelden zum Antworten