Array Problem
-
Guten abend.
Ich steh bei meinem Problem komplett auf dem Schlauch.
Folgendes Szenatrio :
Ich habe einstruct Itemdas ganze hat dann halt ein paar parameter.
Items* z = new Item[3]; z[0].sdsdsd="adsadsda"; z[1].sdsdsd="adsadsda"; z[2].sdsdsd="adsadsda"; smgr->DrawBox(/*, , , , */,3,z);3 = anzahl der items, und z halt einfach der pointer.
Funktioniert auch gut , aber dann wenn ich in den 20 bereich gehe gibts immer fehler.
Aber ich bekomme bein debuggen auch keine info

-
Du machst etwas falsch. Wenn dir die Antwort jetzt nicht weiter hilft, solltest du deine Problembeschreibung noch einmal durchlesen und dich fragen, wie es jemandem ohne Glaskugel möglich sein soll, dir zu helfen.
-
newbie1337 schrieb:
Funktioniert auch gut , aber dann wenn ich in den 20 bereich gehe gibts immer fehler.
Gibt es diesen Satz auch in einem Format, aus dem andere etwas ableiten können?
(blind geraten: Wenn du der Funktion 20 Werte übergeben willst, muß dein Array auch 20 Werte enthalten und nicht nur 3)
-
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
