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


  • Mod

    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.


  • Mod

    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_align

    Dadurch 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 Item keinen Default-Konstruktor hat, erhältst du so einen Compilerfehler, falls du ein Objekt vergisst. Ausserdem sind STL-Container sowieso klüger als new[] , 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? Item muss natürlich einen entsprechenden Konstruktor anbieten...



  • Ich wusste garnicht das es bei

    struct
    

    auch 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 😃


Anmelden zum Antworten