Array Problem
-
wenn ich jetzt von m[0].ss="DD"; bis m[21].ss="FF"; habe und dann
Items* z = new Item[22]; z[0].sdsdsd="adsadsda"; z[1].sdsdsd="adsadsda"; ... z[22].sdsdsd="adsadsda"; smgr->DrawBox(/*, , , , */,22,z);Dann bekomme ich bein ausführen keinen fehler aber sobald ich die funktion drawbox aufrufe wird das programm unterbrochen
-
Ein 22 Elemente-Array geht ja auch von 0 bis 21
. Zähl mal nach.Und Arrays mit statischer Größe mit new anzulegen sieht mir nach Unfug aus.
-
Ist mir klar ich hab mich bloß verschrieben.Durch deine antwort geht es trotzdem noch nicht. :p
-
Das wird wohl noch eine Weile so bleiben, falls du deinen Fehler weiterhin nicht vernünftig beschreiben willst.
Mach mal ein minimales und komplettes Codebeispiel, welches das Problem repräsentiert.
-
Und schreib nicht ab! Kopier! Wenn du es hier schon falsch schreibst, dann hast du im Original vielleicht andere Schreibfehler. Und du verschwendest nicht unsere Zeit mit Fehlern, die gar keine sind.
-
Und schreib nicht ab
Der code ist nicht aus meinem sc übernommen sonder das hab ich nur schnell als beispiel geschrieben.
Und du verschwendest nicht unsere Zeit mit Fehlern, die gar keine sind.
Das nach dem komm war richtig.
In meiner langen liste von arrays hab ich bloß item**[11]**.sadsadsd...
Also das 11. element vergessen.
-
Sagen dir Schleifen was? Die sind nämlich genau dazu da, um diese Art von Codeduplizierung zu vermeiden.
-
Wie ist denn DrawBox definiert? Zeig mal den code und auch die Fehlermeldung, die der compiler ausspuckt.
-
Wie schon gesagt gibt es kein Problem mehr.Das hättest du auch durch das durchlesen der vorigen beiträge herausgefunden.
Mit den schleifen ist das so ne sache :
Ich muss ja jedes element einzeln definieren da sie 3 Werte enthalten müssen:
.Caption
.color
.text_alignDadurch ist man flexibler.
Man könnte vielleicht wenn man immer 3 gleiche Werte haben will eine for schleife einbauen , doch sonst weiß ich nicht wie du eine Schleife sinnvoll benutzen willst.
-
Wenn es jedes Mal unabhängige neue Werte sind, kannst du keine Schleifen verwenden. Aber dafür die Array-Initialisierungsliste. Z.B. direkt mit
std::array:std::array<Item, 22> z = { Item(caption0, color0, align0), Item(caption1, color1, align1), Item(caption2, color2, align2), ... Item(caption21, color21, align21) };Wenn
Itemkeinen Default-Konstruktor hat, erhältst du so einen Compilerfehler, falls du ein Objekt vergisst. Ausserdem sind STL-Container sowieso klüger alsnew[], da du dich nicht um den Speicher kümmern musst.
-
Ok sorry aber ich versteh das nicht was du geschrieben hast

wie muss ich das dann machen ?
So ? :...
Item(caption0="ssd", color0=COLOR_RED, align0=ALIGN_CENTER),
...
-
Nein, ganz normal die Argumente übergeben. Wie man eine Funktion aufrufst, weisst du, oder?
Itemmuss natürlich einen entsprechenden Konstruktor anbieten...
-
Ich wusste garnicht das es bei
structauch konstructoren gibt...
Aber also
Item::Item(){}.....Und brach ich dann auch den destruktor
Item::~Item...?
-
struct ist absolut dasselbe wie class, außer dass per default alles public ist.
-
Achso ok danke
