Klassenübergreifend übergeben / zurückgeben



  • Hallo Leute,

    ich bin ganz frisch und versuch ein wenig zu programmieren. Natürlich versuch ich vieles und stoße dauerhaft auf neue Aufgaben. Nichts was man nicht lösen könnte bis jetzt. Doch jetzt habe ich was vor, wofür ich bis jetzt leider noch keine Lösung gefunden habe.

    Ich versuche gerade klassenübergreifend einen Wert zu übergeben bzw. zurückzugeben. Dies soll ungefähr so aussehen:

    //aus der ersten Klasse
    void getraenke::init
    {
        anzahlFlaschen[0] = 15;
        anzahlFlaschen[1] = 25;
        anzahlFlaschen[2] = 35;
    }
    
    .....
    
    int getraenke::anzahlFlasche(int auswahl)
    {
        return anzahlFlaschen[auswahl-1];
    }
    
    //aus der zweiten Klasse -> hier ist Klasse 1 "getraenke = glass"
    int getraenkeautomat::getraenkeAnzahlWaehlen(int auswahl)
    {
        int anzahl;
        cout << "Es sind noch " << glass->anzahlFlasche(auswahl) << " Flaschen vorhanden!" << endl ;
        cout << "Wie viele Flaschen moechten Sie haben: " ;
        cin >> anzahl;
        if (anzahl > glass->anzahlFlasche(auswahl))
        {
            cout << "Es sind nur noch " << glass->anzahlFlasche(auswahl) << " vorhanden." << endl ;
            cout << "Sie bekommen den Rest!" << endl ;
            glass->anzahlFlasche(auswahl) = 0 ; //hier soll "anzahlFlaschen gleich Null gesetzt werden. 
        }
        else
        {
            cout << "Sie bekommen " << anzahl << " Flaschen!" << endl ;
        }
        return anzahl;
    }
    

    Soweit, sogut. Problem tritt bei Zeile 27 mit " glass->anzahlFlasche(auswahl) = 0 ;" auf. Dort kommt die Meldung
    "error:lvalue required as left operand of assignment".

    Also innerhalb einer Klasse bekomm ich es hin und andere Lösungen funktionieren auch. Nur weiß ich leider nicht, ob dies auch klassenübergreifend funktioniert.

    Und ja, es ist eine Aufgabe. Dies ist aber nur ein "kleiner" Teil davon und soweit bin ich fertig damit. Dies ist "hoffentlich" das Letzte was ich daran noch ändern möchte.

    Für ein Tipp wäre ich dankbar.


  • Mod

    Vermutlich ist

    int& getraenke::anzahlFlasche(int auswahl)
    

    gemeint. Dies ist eher aus der Programmlogik als aus den verwirrenden Bezeichnern abgeleitet.



  • Das würde ich im Allgemeinen nicht so lösen. Schreib für jedes "Ding" halt eine eigene Funktion. Eine, die den Autmaten wieder auffüllt, eine die Flaschen abgibt und eine Funktion die testet, ob genug Flaschen vorhanden sind.

    Designmässig ist es andernfalls voll für die Katz.



  • Danke für die schnellen Antworten.

    @SeppJ
    Leider kenne ich nicht "int&". Dies habe ich bis jetzt in meiner Weiterbildung noch nicht gelernt. Soweit ich das jetzt nachgelesen haben, ist das ein Zeiger, der einen Wert ändern kann. Anders geht es nicht oder?

    @Psynterniert
    ich möchte gern alles in eigene Funktionen schreiben. Ich selber bin auch der Meinung, dass ich dies gemacht habe. Der o.g. Code ist ja nur ein "kleiner" Ausschnitt. Insgesamt gibt es ja 3 verschiedene Klassen mit 13 Funktionen + Main.
    Inwiefern ist meins "Designmässig ist es andernfalls voll für die Katz."? Ich nehme gern Ratschläge an.


Anmelden zum Antworten