Lokale Variablen :(



  • Hi 😉

    Ich habe ein etwas größeres Problem mit einer Klasse und zwar wenn ich was eingeben(in haupt(...)) will,dass es dann nicht in(configure(...)) ausgegeben wird. Es hat was mit Lokalen Variablen zu tun, denke ich 😞

    Hier ist meine Klasse:

    int zahl1 = 0; int zahl2 = 0;
    
    class xyz
    {
    public:
    //Vektor mit zbsp. 10zahlen, 2 zahlen pro reihe,etc..
    //Config & haupt:
    void configure(std::vector<int> Zahlenreihe);
    void haupt(std::vector<int> Zahlenreihe);
    private:
    int a;
    int b;
    std::vector<int> Zahlenreihe;
    };
    
    void xyz::configure(std::vector<int> Zahlenreihe)
    {
    zahl1 = a;
    zahl2 = b;
    // Verarbeitung der Zahlen, zbsp.:
    if (Zahlenreihe[a + 4] == 5 && Zahlenreihe[b + 4] == 8)
    {
    //... Ausgabe bei true usw..
    } else {
    //...Ausgabe,etc.
    }
    }
    
    void xyz::haupt(std::vector<int> Zahlenreihe)
    {
    std::cin>>a>>b;
    configure(Zahlenreihe);
    }
    

    Dieses Programm soll eigentlich nur machen, dass ich die einstellungen(if-Abfragen, Ausgaben) aus configure(..); in haupt(...); verwenden kann, also hier mal ein Beispiel:

    haupt():
    ich gebe zwei Zahlen ein, bsp.:
    5 und 8.

    und nun wird die Funktion configure(...); aufgerufen, um zu überprüfen, ob Zahlenreihe[a + 4] == 5 und Zahlenreihe[b + 4] == 8 ist.
    Ist dies der Fall, wird etwas ausgegeben, zbsp. "Richtig" und wenn es nicht so wäre, dann "Falsch".

    Ich hoffe, ihr versteht mich, ich habs so gut erklärt wie ich es kann. Nur funktioniert mein Programm leider nicht 😞

    Mit freundlichen Grüßen,
    Thomas Salzer



  • Und wie genau äußert sich dein Problem? (abgesehen davon, daß zahl1 und zahl2 nirgends definiert sind und die Methodenparameter den selben Namen bekommen haben wie ein Klassenelement)q



  • Also wenn ich dann im Mainprogramm

    void xyz::haupt(std::vector<int> Zahlenreihe) 
    { 
    std::cin>>a>>b; 
    configure(Zahlenreihe); 
    }
    

    aufrufe, will ich,dass zwei Zahlen (sowas wie "Bitte geben Sie zwei Zahlen ein" mach ich später) vom Benutzer eingegeben werden. Nun prüft configure(Zahlenreihe); ob die zwei Zahlen, die vom Benutzer eingegeben wurden, mit denen in der If-Aneisung übereinstimmen. Ist es der Fall, wird dann irgendetwas im Vektor gemacht,zbsp. eine Zahl ist dann Zahlenreihe.end() oder weiter vorne. Wird halt verschoben und es wird noch ein kleiner Text ausgegeben.

    Ich würde gerne das ein bisschen in Funktionen aufteilen, sonst müsste ich alles in haupt(..); schreiben:

    void xyz::haupt(std::vector<int> Zahlenreihe)
    {
    std::cin>>a>>b;
    if (Zahlenreihe[a + 4] == 5 && Zahlenreihe[b + 4] == 8)
    {
    //... Ausgabe bei true usw..
    } else {
    //...Ausgabe,etc.
    }
    }
    

    ^ das Programm hier ober dem "^" würde so sein, wie ich es will. Außerdem stimmt es(keine Fehler oder Warnungen).

    Mit freundlichen Grüßen,
    Thomas Salzer



  • Also von der Logik stimmt das obige Programm mit dem überein, was du da erzählt hast - allerdings erhält configure() eine Kopie des vector<>s, so daß sich Änderungen, die du dort vornimmst, nicht auf haupt() auswirken werden.

    Aber vielleicht solltest du mal erwähnen, welche Fehlermeldungen der Compiler dir entgegenwirft.

    Aus meiner Sicht fallen schon auf:

    • zahl1 und zahl2 sind nirgends deklariert
    • du hast eine lokale Variable (Parameter) und ein Klassenelement mit dem Namen 'Zahlenreihe' - letzteres wird nirgends verwendet.

    (über den Sinn des Programms denke ich lieber nicht nach)


Anmelden zum Antworten