Probleme beim Arbeiten mit Objekt



  • Ich hab zur Übung mit C++ diesen Code geschrieben:

    using namespace std;
    
    class figure {
    private:
    public:
    int werte[] = {0,3,3,3,3,3,1,3,1,7,5,0};
    
    };
    
    double chance(figure a, figure b)
    {
    int punkte[] = {0,4,4,b.werte[10],b.werte[11]};
    (a.werte[2]>b.werte[2])?(punkte[1]-=1):();
    ((a.werte[2]*2)<b.werte)?(punkte[1]+=1):();
    (a.werte[4]>b.werte[5])?(punkte[2]-=1):();
    ((a.werte[4]-1)>b.werte[5])?(punkte-=1):();
    (a.werte[4]<b.werte[5])?(punkte[2]+=1):();
    ((a.werte[4]+1)<b.werte[5])?(punkte+=1):();
    (a.werte[4]>3)?(punkte[3]+=(a.werte[4]-3)):();
    (punkte[3]<2)?(punkte[3]=2):();
    (punkte[3]>7)?(punkte[3]=7):();
    // da ein wurf von 5+ eine Wahrscheinlichkeit von 4/6 hat zu versagen
    double x = 1;
    double chance;
    punkte[1]--;
    x*=6;
    punkte[2]--;
    x*=6;
    punkte[3]--;
    x*=6;
    punkte[4]--;
    x*=6;
    chance = (double)(punkte[1]*punkte[2]*punkte[3]*punkte[4])/x;
    return(chance);}
    

    Und kriege eine ganze Armee von Fehlermeldungen. Die Meisten davon sagen das die funktion chance die Variable Werte nicht lesen kann bzw das diese nicht existiere. Ich hab vermutlich nur n kleinen Fehler irgendwo aber ich finde ihn nicht. Im Internet hab ich sonst auch nichts gefunden was mir weiterhilft...

    Vielen Dank schonmal im Vorraus



  • Rück deinen Code erst einmal vernünftig ein! So ist es kein wunder, dass du da nicht mehr durchblickst! 😡

    Zeile6 geht so schon mal gar nicht und eine Variable wie eine Funktion zu benennen (Zeile10 vs Zeile25) geht auch nicht...

    Und dann solltest du mal den Unterschied zwischen ?: und if anschauen 😡 So wie du ?: verwendest ist es falsch und unleserlich 😡



  • ok dann werd ich das mit dem ?: erstmal lassen , aber was is denn an Zeile 6 Falsch ? Ich Deklariere ein Array und Initialisier das gleich , hab ich da was falsch verstanden ? Das Zeile 25 nicht geht seh ich im nachhinein ein aber was ist an Zeile 10 falsch ?

    Und ich dachte ich hätte die Theorie verstanden ....



  • Du kannst Member so direkt nicht intialisieren (außer ganzzahlige konstanten) und bei Arrays ist das derzeit leider sowieso noch komplizierter.

    du könntest das zB so machen

    #include <algorithm>
    #include <cassert>
    
    struct figure {
      int werte[12];
    
      figure() {
        int const c[] = {0,3,3,3,3,3,1,3,1,7,5,0};
        assert(sizeof(c) == sizeof(werte));
        std::copy(c, c+sizeof(c), werte);
      }
    };
    

    wobei die "coolen 🕶 Kids von heute(tm)" wohl eher

    struct figure {
      std::array<int, 12> werte;
    
      figure()
        : werte(boost::assign::list_of(0)(3)(3)...)
      { }
    };
    

    schreiben würden (dafür musst du aber boost installieren bzw. dir list_of() selbst bauen...)



  • Bemerke übrigens die erhöhte Lesbarkeits meines Codes, durch _richtige_ Codeeinrückung. Das solltest du (wie gesagt) als erstes üben.



  • Ok, vielen dank. Werde veruchen meinen Code lesbarer zu gestalten ^^


Log in to reply