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 ^^