Undefinierter Integer [gelöst]



  • @Richard_Wunsch So wie du das jetzt hast, wird als Wert der inneren Map das Ergebnis von x + y gespeichert. Das ist in dem Fall aber sogar, da x und y nicht initialisiert sind, undefiniert.
    Um die Formel zu speichern, musst du eine Funktion in der Map speichern. Das machst du wahlweise über Funktionspointer bzw. std::function. Wahlweise könntest du das wohl auch über Funktoren hinbekommen.
    Verwenden denn alle Formeln nur x und y oder auch noch andere Parameter?

    Oder wiederum verstehe ich dich komplett falsch und die willst die Formel einfach als String speichern, um sie auszugeben?



  • @Unterfliege Ok, initalisieren habe ich gelöst. Waren ein paar Klammern zu wenig...

    #include <map>
    #include <string>
    #include <iostream>
    
    int foo (int x, int y){
        return (x+y);
    }
    
    int main(){
        std::map <std::string, std::map <int,int>> test = {{"test",{{1,foo(1,1)}}}};
    }
    

    Das eigentliche Ziel ist es, einen Werte (erster integer) einzulesen, einer vordefinierten Kategorie zuzuweisen (string) und dann in die Rechnung (zweiter integer) mit einzubinden. Also quasi so etwas: ["Kategorie"] = [x+y] - [eingelesener Wert]

    Edit: Wichtig dabei ist, dass wenn kein Wert eingelesen wird, die gesamte Kategorie undefiniert bleibt.



  • @Richard_Wunsch sagte in 3d map initialisieren:

    Das eigentliche Ziel ist es,

    Habe die Erklärung leider nicht verstanden.

    Jetzt hast du eine Datenstruktur, die so aussieht:

    "Kategorie" => ( 1 => 2)

    Insbesondere ist mir die innere map von int auf int nicht klar. Damit speicherst du eine Zuordnung von Zahlen auf Zahlen, also hier in deinem Beispiel von 1 auf 2. D.h. das "foo" wird nicht in der map gespeichert, sondern nur das Ergebnis von foo.



  • Ah ja, das macht natürlich Sinn. Danke für die Veranschaulichung!

    #include <map>
    #include <string>
    #include <iostream>
    
    int foo (int x, int y){
        return (x+y);
    }
    
    int main()
    {
        int y;
        std::cin >> y;
        std::map <std::string, int> test = {{"test", foo(1,2)-y}};
    
    }
    

    So ist es jetzt aber "Kategorie" => Rechnung - eingegebener Wert, richtig?



  • @Richard_Wunsch Jein.
    Jetzt ist es:
    "Kategorie" => Ergebnis
    Aus deinem Ergebnis kannst du aber natürlich nicht mehr ursprüngliche Eingabe und deine Formel ableiten. Ich weiß natürlich nicht, ob das dein Ziel ist.


Anmelden zum Antworten